From f4185c30056ade1cc72bb136196d317208ab21e3 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Sun, 4 Oct 2015 12:22:47 +0200 Subject: [PATCH 001/117] optimized handling of special characters --- README.md | 22 ++++++++++++---------- bower.json | 2 +- example/index.html | 2 +- package.json | 2 +- release/flowchart.amd.js | 20 ++++++++++---------- release/flowchart.amd.min.js | 4 ++-- release/flowchart.amd.min.map | 2 +- release/flowchart.amd.zip | Bin 28397 -> 28434 bytes release/flowchart.js | 20 ++++++++++---------- release/flowchart.min.js | 4 ++-- release/flowchart.min.map | 2 +- release/flowchart.zip | Bin 28406 -> 28378 bytes releasenotes.md | 4 ++++ src/flowchart.parse.js | 18 +++++++++--------- 14 files changed, 54 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index 3a271099..93df042e 100644 --- a/README.md +++ b/README.md @@ -20,22 +20,22 @@ and then ```html
Diagram will be placed here
- ``` +#Advice +Symbols that should possibly not be used in the text: '=>' and '->' and ':>' and '|' #Contributors diff --git a/bower.json b/bower.json index 7f705cc5..8b16609a 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "flowchart", - "version": "1.4.1", + "version": "1.4.2", "main": "./release/flowchart.min.js", "dependencies": {}, "ignore": [ diff --git a/example/index.html b/example/index.html index de9af51d..ccb6515c 100644 --- a/example/index.html +++ b/example/index.html @@ -9,7 +9,7 @@ - + + + + + diff --git a/index.js b/index.js new file mode 100644 index 00000000..701515da --- /dev/null +++ b/index.js @@ -0,0 +1,7 @@ +require('./src/flowchart.shim'); +var parse = require('./src/flowchart.parse'); +require('./src/jquery-plugin'); + +module.exports = { + parse: parse +}; diff --git a/package.json b/package.json index 293432fa..de2bd09c 100644 --- a/package.json +++ b/package.json @@ -6,18 +6,32 @@ "engines": { "node": "~v0.4.12" }, - "dependencies": {}, + "dependencies": { + "raphael": "git://github.com/DmitryBaranovskiy/raphael.git" + }, "devDependencies": { + "async": ">= 0.1.18", + "babel-core": "^6.4.0", + "babel-loader": "^6.2.1", + "eslint": "^1.10.3", + "eslint-config-defaults": "^8.0.2", + "express": ">= 0.0.1", "grunt": ">=0.4.1", - "grunt-rigger": ">=0.5.0", "grunt-contrib": ">=0.1.0", - "express": ">= 0.0.1", - "async": ">= 0.1.18", + "grunt-rigger": ">=0.5.0", + "jquery": "^2.2.0", "lodash": ">=0.2.1", + "webpack": "^1.12.11", + "webpack-dev-middleware": "^1.4.0", + "webpack-hot-middleware": "^2.6.0", "zipstream": ">=0.2.1" }, "scripts": { - "test": "" + "start": "node devserver.js", + "lint": "eslint src", + "build:unminified": "NODE_ENV=production webpack --config webpack.config.js", + "build:minified": "NODE_ENV=production MINIFIED=1 webpack --config webpack.config.js", + "build": "npm run build:unminified && npm run build:minified" }, "repository": { "type": "git", diff --git a/src/amd.js b/src/amd.js deleted file mode 100644 index ab2c5b1d..00000000 --- a/src/amd.js +++ /dev/null @@ -1,34 +0,0 @@ -(function (root, factory) { - if (typeof exports === 'object') { - - module.exports = factory(); - - } else if (typeof define === 'function' && define.amd) { - - define([], factory); - - } -}(this, function () { - - //= flowchart.shim.js - - var root = this, - flowchart = {}; - - //= flowchart.defaults.js - //= flowchart.helpers.js - //= flowchart.functions.js - //= flowchart.chart.js - //= flowchart.symbol.js - //= flowchart.symbol.start.js - //= flowchart.symbol.end.js - //= flowchart.symbol.operation.js - //= flowchart.symbol.subroutine.js - //= flowchart.symbol.inputoutput.js - //= flowchart.symbol.condition.js - //= flowchart.parse.js - //= flowchart.api.js - - return flowchart; - -})); \ No newline at end of file diff --git a/src/flowchart.api.js b/src/flowchart.api.js deleted file mode 100644 index 81fc25e6..00000000 --- a/src/flowchart.api.js +++ /dev/null @@ -1,2 +0,0 @@ -// public api interface -flowchart.parse = parse; \ No newline at end of file diff --git a/src/flowchart.chart.js b/src/flowchart.chart.js index deb61e29..f1d7db8f 100644 --- a/src/flowchart.chart.js +++ b/src/flowchart.chart.js @@ -1,9 +1,14 @@ +var Raphael = require('raphael'); +var defaults = require('./flowchart.helpers').defaults; +var defaultOptions = require('./flowchart.defaults'); +var Condition = require('./flowchart.symbol.condition'); + function FlowChart(container, options) { options = options || {}; this.paper = new Raphael(container); - this.options = f.defaults(options, o); + this.options = defaults(options, defaultOptions); this.symbols = []; this.lines = []; @@ -110,3 +115,5 @@ FlowChart.prototype.clean = function() { paperDom.parentNode.removeChild(paperDom); } }; + +module.exports = FlowChart; diff --git a/src/flowchart.defaults.js b/src/flowchart.defaults.js index 93611489..5303530e 100644 --- a/src/flowchart.defaults.js +++ b/src/flowchart.defaults.js @@ -1,5 +1,5 @@ // defaults -var o = { +module.exports = { 'x': 0, 'y': 0, 'line-width': 3, diff --git a/src/flowchart.exports.js b/src/flowchart.exports.js deleted file mode 100644 index 49a23cf1..00000000 --- a/src/flowchart.exports.js +++ /dev/null @@ -1,8 +0,0 @@ -// Export the flowchart object for **CommonJS**. -// If we're not in CommonJS, add `flowchart` to the -// global object or to jquery. -if (typeof module !== 'undefined' && module.exports) { - module.exports = flowchart; -} else { - root.flowchart = root.flowchart || flowchart; -} \ No newline at end of file diff --git a/src/flowchart.functions.js b/src/flowchart.functions.js index b76b0aa8..3e3470cf 100644 --- a/src/flowchart.functions.js +++ b/src/flowchart.functions.js @@ -158,4 +158,10 @@ function checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, l } // if line1 and line2 are segments, they intersect if both of the above are true return result; -} \ No newline at end of file +} + +module.exports = { + drawPath: drawPath, + drawLine: drawLine, + checkLineIntersection: checkLineIntersection +}; diff --git a/src/flowchart.helpers.js b/src/flowchart.helpers.js index b8b770c5..acb17cba 100644 --- a/src/flowchart.helpers.js +++ b/src/flowchart.helpers.js @@ -44,7 +44,7 @@ function _inherits(ctor, superCtor) { // move dependent functions to a container so that // they can be overriden easier in no jquery environment (node.js) -var f = { +module.exports = { defaults: _defaults, inherits: _inherits -}; \ No newline at end of file +}; diff --git a/src/flowchart.js b/src/flowchart.js deleted file mode 100644 index 91db07e7..00000000 --- a/src/flowchart.js +++ /dev/null @@ -1,23 +0,0 @@ -(function() { - - //= flowchart.shim.js - - var root = this, - flowchart = {}; - - //= flowchart.exports.js - //= flowchart.defaults.js - //= flowchart.helpers.js - //= flowchart.functions.js - //= flowchart.chart.js - //= flowchart.symbol.js - //= flowchart.symbol.start.js - //= flowchart.symbol.end.js - //= flowchart.symbol.operation.js - //= flowchart.symbol.subroutine.js - //= flowchart.symbol.inputoutput.js - //= flowchart.symbol.condition.js - //= flowchart.parse.js - //= flowchart.api.js - -})(); \ No newline at end of file diff --git a/src/flowchart.parse.js b/src/flowchart.parse.js index e6e8279a..b01d40dd 100644 --- a/src/flowchart.parse.js +++ b/src/flowchart.parse.js @@ -1,3 +1,11 @@ +var FlowChart = require('./flowchart.chart'); +var Start = require('./flowchart.symbol.start'); +var End = require('./flowchart.symbol.end'); +var Operation = require('./flowchart.symbol.operation'); +var InputOutput = require('./flowchart.symbol.inputoutput'); +var Subroutine = require('./flowchart.symbol.subroutine'); +var Condition = require('./flowchart.symbol.condition'); + function parse(input) { input = input || ''; input = input.trim(); @@ -232,3 +240,5 @@ function parse(input) { } return chart; } + +module.exports = parse; diff --git a/src/flowchart.symbol.condition.js b/src/flowchart.symbol.condition.js index 3c776478..57944e47 100644 --- a/src/flowchart.symbol.condition.js +++ b/src/flowchart.symbol.condition.js @@ -1,3 +1,8 @@ +var Symbol = require('./flowchart.symbol'); +var inherits = require('./flowchart.helpers').inherits; +var drawAPI = require('./flowchart.functions'); +var drawPath = drawAPI.drawPath; + function Condition(chart, options) { options = options || {}; Symbol.call(this, chart, options); @@ -74,7 +79,7 @@ function Condition(chart, options) { this.initialize(); } -f.inherits(Condition, Symbol); +inherits(Condition, Symbol); Condition.prototype.render = function() { @@ -90,7 +95,6 @@ Condition.prototype.render = function() { if (this.bottom_symbol) { var bottomPoint = this.getBottom(); - var topPoint = this.bottom_symbol.getTop(); if (!this.bottom_symbol.isPositioned) { this.bottom_symbol.shiftY(this.getY() + this.height + lineLength); @@ -103,7 +107,6 @@ Condition.prototype.render = function() { if (this.right_symbol) { var rightPoint = this.getRight(); - var leftPoint = this.right_symbol.getLeft(); if (!this.right_symbol.isPositioned) { @@ -146,3 +149,5 @@ Condition.prototype.renderLines = function() { this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction); } }; + +module.exports = Condition; diff --git a/src/flowchart.symbol.end.js b/src/flowchart.symbol.end.js index 1da193db..4d8ee581 100644 --- a/src/flowchart.symbol.end.js +++ b/src/flowchart.symbol.end.js @@ -1,7 +1,12 @@ +var Symbol = require('./flowchart.symbol'); +var inherits = require('./flowchart.helpers').inherits; + function End(chart, options) { var symbol = chart.paper.rect(0, 0, 0, 0, 20); options = options || {}; options.text = options.text || 'End'; Symbol.call(this, chart, options, symbol); } -f.inherits(End, Symbol); \ No newline at end of file +inherits(End, Symbol); + +module.exports = End; diff --git a/src/flowchart.symbol.inputoutput.js b/src/flowchart.symbol.inputoutput.js index cca3230b..411c691d 100644 --- a/src/flowchart.symbol.inputoutput.js +++ b/src/flowchart.symbol.inputoutput.js @@ -1,8 +1,13 @@ +var Symbol = require('./flowchart.symbol'); +var inherits = require('./flowchart.helpers').inherits; +var drawAPI = require('./flowchart.functions'); +var drawPath = drawAPI.drawPath; + function InputOutput(chart, options) { options = options || {}; Symbol.call(this, chart, options); this.textMargin = this.getAttr('text-margin'); - + this.text.attr({ x: this.textMargin * 3 }); @@ -42,7 +47,7 @@ function InputOutput(chart, options) { this.initialize(); } -f.inherits(InputOutput, Symbol); +inherits(InputOutput, Symbol); InputOutput.prototype.getLeft = function() { var y = this.getY() + this.group.getBBox().height/2; @@ -55,3 +60,5 @@ InputOutput.prototype.getRight = function() { var x = this.getX() + this.group.getBBox().width - this.textMargin; return {x: x, y: y}; }; + +module.exports = InputOutput; diff --git a/src/flowchart.symbol.js b/src/flowchart.symbol.js index 507331df..fa03cdd5 100644 --- a/src/flowchart.symbol.js +++ b/src/flowchart.symbol.js @@ -1,3 +1,7 @@ +var drawAPI = require('./flowchart.functions'); +var drawLine = drawAPI.drawLine; +var checkLineIntersection = drawAPI.checkLineIntersection; + function Symbol(chart, options, symbol) { this.chart = chart; this.group = this.chart.paper.set(); @@ -7,12 +11,12 @@ function Symbol(chart, options, symbol) { this.flowstate = (options.flowstate || 'future'); this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined; - + this.text = this.chart.paper.text(0, 0, options.text); //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t if (options.key) { this.text.node.id = options.key + 't'; } this.text.node.setAttribute('class', this.getAttr('class') + 't'); - + this.text.attr({ 'text-anchor': 'start', 'x' : this.getAttr('text-margin'), @@ -47,12 +51,12 @@ function Symbol(chart, options, symbol) { } this.text.attr("text", tempText.substring(1)); } - + this.group.push(this.text); if (symbol) { var tmpMargin = this.getAttr('text-margin'); - + symbol.attr({ 'fill' : this.getAttr('fill'), 'stroke' : this.getAttr('element-color'), @@ -161,7 +165,6 @@ Symbol.prototype.render = function() { if (this.next_direction === 'right') { var rightPoint = this.getRight(); - var leftPoint = this.next.getLeft(); if (!this.next.isPositioned) { @@ -194,7 +197,6 @@ Symbol.prototype.render = function() { } } else { var bottomPoint = this.getBottom(); - var topPoint = this.next.getTop(); if (!this.next.isPositioned) { this.next.shiftY(this.getY() + this.height + lineLength); @@ -224,7 +226,6 @@ Symbol.prototype.drawLineTo = function(symbol, text, origin) { var x = this.getCenter().x, y = this.getCenter().y, - top = this.getTop(), right = this.getRight(), bottom = this.getBottom(), left = this.getLeft(); @@ -233,7 +234,6 @@ Symbol.prototype.drawLineTo = function(symbol, text, origin) { symbolY = symbol.getCenter().y, symbolTop = symbol.getTop(), symbolRight = symbol.getRight(), - symbolBottom = symbol.getBottom(), symbolLeft = symbol.getLeft(); var isOnSameColumn = x === symbolX, @@ -369,13 +369,9 @@ Symbol.prototype.drawLineTo = function(symbol, text, origin) { } if (line) { - var self = this; for (var l = 0, llen = this.chart.lines.length; l < llen; l++) { var otherLine = this.chart.lines[l]; - var i, - len, - intersections, - inter; + var len; var ePath = otherLine.attr('path'), lPath = line.attr('path'); @@ -448,3 +444,5 @@ Symbol.prototype.drawLineTo = function(symbol, text, origin) { this.chart.maxXFromLine = maxX; } }; + +module.exports = Symbol; diff --git a/src/flowchart.symbol.operation.js b/src/flowchart.symbol.operation.js index 1e938eda..ad3c108e 100644 --- a/src/flowchart.symbol.operation.js +++ b/src/flowchart.symbol.operation.js @@ -1,6 +1,11 @@ +var Symbol = require('./flowchart.symbol'); +var inherits = require('./flowchart.helpers').inherits; + function Operation(chart, options) { var symbol = chart.paper.rect(0, 0, 0, 0); options = options || {}; Symbol.call(this, chart, options, symbol); } -f.inherits(Operation, Symbol); \ No newline at end of file +inherits(Operation, Symbol); + +module.exports = Operation; diff --git a/src/flowchart.symbol.start.js b/src/flowchart.symbol.start.js index f594080d..881d4d5a 100644 --- a/src/flowchart.symbol.start.js +++ b/src/flowchart.symbol.start.js @@ -1,11 +1,15 @@ +var Symbol = require('./flowchart.symbol'); +var inherits = require('./flowchart.helpers').inherits; + function Start(chart, options) { var symbol = chart.paper.rect(0, 0, 0, 0, 20); options = options || {}; options.text = options.text || 'Start'; Symbol.call(this, chart, options, symbol); } -f.inherits(Start, Symbol); +inherits(Start, Symbol); +module.exports = Start; // Start.prototype.render = function() { // if (this.next) { @@ -28,4 +32,4 @@ f.inherits(Start, Symbol); // if (this.next) { // this.drawLineTo(this.next); // } -// }; \ No newline at end of file +// }; diff --git a/src/flowchart.symbol.subroutine.js b/src/flowchart.symbol.subroutine.js index c8fd7411..fdbf6535 100644 --- a/src/flowchart.symbol.subroutine.js +++ b/src/flowchart.symbol.subroutine.js @@ -1,3 +1,6 @@ +var Symbol = require('./flowchart.symbol'); +var inherits = require('./flowchart.helpers').inherits; + function Subroutine(chart, options) { var symbol = chart.paper.rect(0, 0, 0, 0); options = options || {}; @@ -37,4 +40,6 @@ function Subroutine(chart, options) { this.initialize(); } -f.inherits(Subroutine, Symbol); +inherits(Subroutine, Symbol); + +module.exports = Subroutine; diff --git a/src/jquery-plugin.js b/src/jquery-plugin.js new file mode 100644 index 00000000..ad644071 --- /dev/null +++ b/src/jquery-plugin.js @@ -0,0 +1,13 @@ +if (typeof jQuery != 'undefined') { + var parse = require('./flowchart.parse'); + (function( $ ) { + $.fn.flowChart = function( options ) { + return this.each(function() { + var $this = $(this); + var chart = parse($this.text()); + $this.html(''); + chart.drawSVG(this, options); + }); + }; + })( jQuery ); // eslint-disable-line +} diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 00000000..39a2084d --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,88 @@ +var path = require('path'); +var webpack = require('webpack'); + +var bundlename = 'flowchart'; +var NODE_ENV = process.env.NODE_ENV || 'development'; +var defines = new webpack.DefinePlugin({ + 'process.env': { + 'NODE_ENV': JSON.stringify(NODE_ENV) + } +}); + +var config = { + entry: [ + 'webpack-hot-middleware/client', + './index' + ], + output: { + path: path.join(__dirname, 'build'), + filename: bundlename + '.js', + publicPath: '/build/' + }, + plugins: [ + new webpack.HotModuleReplacementPlugin(), + new webpack.NoErrorsPlugin(), + defines + ], + module: { + loaders: [ + { + test: /\.json$/, + loader: 'json' + }, + { + test: /\.js$/, + loader: 'babel', + exclude: /node_modules/ + } + ] + }, + resolve: { + extensions: ['', '.js'], + modulesDirectories: ['src', 'node_modules'], + alias: { + 'dev/raphael.core.js': './dev/raphael.core.js', + 'raphael.core': './raphael.core.js', + 'raphael.svg': './dev/raphael.svg.js', + 'raphael.vml': './dev/raphael.vml.js' + } + } +}; + +if (NODE_ENV === 'development') { + config.devtool = 'source-map'; +} + +if (NODE_ENV === 'production') { + var minified = process.env.MINIFIED == '1'; + var filename = minified ? bundlename + '-min.js' : bundlename + '.js'; + var uglifyOptions = { + sourceMap: false, + comments: false, + compressor: { + warnings: false, + dead_code: true + } + }; + if (!minified) { + uglifyOptions.sourceMap = true; + uglifyOptions.beautify = true; + uglifyOptions.mangle = false; + uglifyOptions.comments = 'all'; + } + config.entry = './index'; + config.externals = { + raphael: 'Raphael' + }; + config.output = { + path: path.join(__dirname, 'release'), + filename: filename + }; + config.plugins = [ + new webpack.optimize.OccurenceOrderPlugin(), + defines, + new webpack.optimize.UglifyJsPlugin(uglifyOptions) + ]; +} + +module.exports = config; From 45f92ed2f401f27aeadfc406aff8a15f81c662a5 Mon Sep 17 00:00:00 2001 From: sergeyt Date: Thu, 14 Jan 2016 17:09:22 +0600 Subject: [PATCH 007/117] set main file --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index de2bd09c..f67febf8 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "author": "adrai", "name": "flowchart", "version": "1.4.2", + "main": "./index", "private": false, "engines": { "node": "~v0.4.12" From 117d71326b5ff65db08736d5482e741366403193 Mon Sep 17 00:00:00 2001 From: sergeyt Date: Thu, 14 Jan 2016 17:47:18 +0600 Subject: [PATCH 008/117] now publish all files --- package.json | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/package.json b/package.json index f67febf8..741715f9 100644 --- a/package.json +++ b/package.json @@ -44,13 +44,5 @@ "script" ], "homepage": "http://flowchart.js.org/", - "license": "MIT", - "files": [ - "release/flowchart.js", - "release/flowchart.min.js", - "release/flowchart.min.map", - "release/flowchart.amd.js", - "release/flowchart.amd.min.js", - "release/flowchart.amd.min.map" - ] + "license": "MIT" } From a90eda24e15e58de485cc7f394163e6cdd9a79f6 Mon Sep 17 00:00:00 2001 From: sergeyt Date: Thu, 14 Jan 2016 21:03:57 +0600 Subject: [PATCH 009/117] revised build scripts --- Gruntfile.js | 246 --- index.js | 8 +- package.json | 19 +- release/flowchart.amd.js | 1427 ------------------ release/flowchart.amd.min.js | 7 - release/flowchart.amd.min.map | 1 - release/flowchart.amd.zip | Bin 28426 -> 0 bytes release/flowchart.js | 2350 ++++++++++++----------------- release/flowchart.js.map | 1 + release/flowchart.min.js | 9 +- release/flowchart.min.js.map | 1 + release/flowchart.min.map | 1 - release/flowchart.zip | Bin 28372 -> 0 bytes src/flowchart.functions.js | 4 +- src/flowchart.symbol.condition.js | 8 +- webpack.config.js | 40 +- 16 files changed, 996 insertions(+), 3126 deletions(-) delete mode 100644 Gruntfile.js delete mode 100644 release/flowchart.amd.js delete mode 100644 release/flowchart.amd.min.js delete mode 100644 release/flowchart.amd.min.map delete mode 100644 release/flowchart.amd.zip create mode 100644 release/flowchart.js.map create mode 100644 release/flowchart.min.js.map delete mode 100644 release/flowchart.min.map delete mode 100644 release/flowchart.zip diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index 679b4dcb..00000000 --- a/Gruntfile.js +++ /dev/null @@ -1,246 +0,0 @@ -/*global module:false*/ -module.exports = function(grunt) { - - var component = require('./package.json'); - // before release: - // update component.js, package.json - // after release: - // add tag to repo: git tag v1.0.0 - // push tag: git push --tags - // to initialize all again - // http://twoguysarguing.wordpress.com/2010/11/14/tie-git-submodules-to-a-particular-commit-or-branch/ - // nav to site and do: git checkout gh-pages - - grunt.loadNpmTasks('grunt-rigger'); - grunt.loadNpmTasks('grunt-contrib'); - - // Project configuration. - grunt.initConfig({ - meta: { - version: component.version, - banner: '// ' + component.name + ', v<%= meta.version %>\n' + - '// Copyright (c)<%= grunt.template.today("yyyy") %> Adriano Raiano (adrai).\n' + - '// Distributed under MIT license\n' + - '// http://adrai.github.io/flowchart.js\n' - }, - - clean: ['bin'], - - jshint: { - options: { - scripturl: true, - laxcomma: true, - loopfunc: true, - curly: false, - eqeqeq: false, - immed: false, - latedef: true, - newcap: true, - noarg: true, - sub: true, - undef: true, - boss: true, - eqnull: true, - browser: true, - globals: { - jQuery: true, - $: true, - console: true, - ActiveXObject: true, - module: true - } - }, - files: [ 'bin/*.js' ] - }, - - rig: { - options: { - banner: '<%= meta.banner %>' - }, - build: { - src: ['src/flowchart.js'], - dest: 'bin/flowchart-latest.js' - }, - amd: { - src: ['src/amd.js'], - dest: 'bin/flowchart.amd-latest.js' - } - }, - - uglify: { - options: { - banner: '<%= meta.banner %>', - }, - // bin: { - // src: ['bin/flowchart-latest.js'], - // dest: 'bin/flowchart-<%= meta.version %>.min.js' - // }, - // release: { - // src: ['bin/flowchart-latest.js'], - // dest: 'release/flowchart-<%= meta.version %>.min.js', - // options: { - // sourceMap: true, - // sourceMapName: 'release/flowchart-<%= meta.version %>.min.map' - // } - // }, - // amd: { - // src: ['bin/flowchart.amd-latest.js'], - // dest: 'release/flowchart.amd-<%= meta.version %>.min.js', - // options: { - // sourceMap: true, - // sourceMapName: 'release/flowchart.amd-<%= meta.version %>.min.map' - // } - // } - release: { - src: ['bin/flowchart-latest.js'], - dest: 'release/flowchart.min.js', - options: { - sourceMap: true, - sourceMapName: 'release/flowchart.min.map' - } - }, - amd: { - src: ['bin/flowchart.amd-latest.js'], - dest: 'release/flowchart.amd.min.js', - options: { - sourceMap: true, - sourceMapName: 'release/flowchart.amd.min.map' - } - } - }, - - copy: { - js: { - // files: [ - // { expand: true, cwd: 'bin/', src: ['*.js'], dest: 'release/', - // rename: function(dest, src) { console.log(src + ' -> ' + dest); - // if (src == 'flowchart-latest.js') { - // dest += 'flowchart-' + component.version + '.js'; - // } - // if (src == 'flowchart.amd-latest.js') { - // dest += 'flowchart.amd-' + component.version + '.js'; - // } - // return dest; - // } - // }, - // { expand: true, cwd: 'bin/', src: ['flowchart-latest.js'], dest: 'site/'} - // //'bin/': ['bin/flowchart-latest.js', 'bin/flowchart.amd-latest.js'], - // //'release/': ['bin/flowchart-latest.js', 'bin/flowchart.amd-latest.js'] - // ] - files: [ - { expand: true, cwd: 'bin/', src: ['*.js'], dest: 'release/', - rename: function(dest, src) { console.log(src + ' -> ' + dest); - if (src == 'flowchart-latest.js') { - dest += 'flowchart.js'; - } - if (src == 'flowchart.amd-latest.js') { - dest += 'flowchart.amd.js'; - } - return dest; - } - }, - { expand: true, cwd: 'bin/', src: ['flowchart-latest.js'], dest: 'site/'} - //'bin/': ['bin/flowchart-latest.js', 'bin/flowchart.amd-latest.js'], - //'release/': ['bin/flowchart-latest.js', 'bin/flowchart.amd-latest.js'] - ] - } - }, - - compress: { - // zip: { - // options: { - // archive: 'release/flowchart-<%= meta.version %>.zip', - // mode: 'zip', - // level: 1 - // }, - // files: [ - // { - // expand: true, - // flatten: true, - // cwd: 'release/', - // src: [ - // 'flowchart-<%= meta.version %>.js', - // 'flowchart-<%= meta.version %>.min.js', - // 'flowchart-<%= meta.version %>.min.map' - // ], - // dest: 'flowchart-<%= meta.version %>/' - // } - // ] - // }, - 'zip-latest': { - options: { - archive: 'release/flowchart.zip', - mode: 'zip', - level: 1 - }, - files: [ - { - expand: true, - flatten: true, - cwd: 'release/', - src: [ - 'flowchart.js', - 'flowchart.min.js', - 'flowchart.min.map' - ], - dest: 'flowchart/' - } - ] - }, - // zipamd: { - // options: { - // archive: 'release/flowchart.amd-<%= meta.version %>.zip', - // mode: 'zip', - // level: 1 - // }, - // files: [ - // { - // expand: true, - // flatten: true, - // cwd: 'release/', - // src: [ - // 'flowchart.amd-<%= meta.version %>.js', - // 'flowchart.amd-<%= meta.version %>.min.js', - // 'flowchart.amd-<%= meta.version %>.min.map' - // ], - // dest: 'flowchart.amd-<%= meta.version %>/' - // } - // ] - // }, - 'zipamd-latest': { - options: { - archive: 'release/flowchart.amd.zip', - mode: 'zip', - level: 1 - }, - files: [ - { - expand: true, - flatten: true, - cwd: 'release/', - src: [ - 'flowchart.amd.js', - 'flowchart.amd.min.js', - 'flowchart.amd.min.map' - ], - dest: 'flowchart/' - } - ] - } - }, - - watch: { - lib: { - files: 'src/*.js', - tasks: 'rig:build' - } - } - - }); - - // Default task. - grunt.registerTask('default', ['clean', 'rig']); - grunt.registerTask('release', ['default', 'uglify', 'copy', 'compress']); - - -}; diff --git a/index.js b/index.js index 701515da..2ce1aa86 100644 --- a/index.js +++ b/index.js @@ -2,6 +2,12 @@ require('./src/flowchart.shim'); var parse = require('./src/flowchart.parse'); require('./src/jquery-plugin'); -module.exports = { +var FlowChart = { parse: parse }; + +if (typeof window !== 'undefined') { + window.FlowChart = FlowChart; +} + +module.exports = FlowChart; diff --git a/package.json b/package.json index 741715f9..28fa6360 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "author": "adrai", "name": "flowchart", "version": "1.4.2", - "main": "./index", + "main": "./index", "private": false, "engines": { "node": "~v0.4.12" @@ -11,28 +11,23 @@ "raphael": "git://github.com/DmitryBaranovskiy/raphael.git" }, "devDependencies": { - "async": ">= 0.1.18", - "babel-core": "^6.4.0", - "babel-loader": "^6.2.1", "eslint": "^1.10.3", "eslint-config-defaults": "^8.0.2", "express": ">= 0.0.1", - "grunt": ">=0.4.1", - "grunt-contrib": ">=0.1.0", - "grunt-rigger": ">=0.5.0", "jquery": "^2.2.0", "lodash": ">=0.2.1", + "moment": "^2.11.1", "webpack": "^1.12.11", "webpack-dev-middleware": "^1.4.0", - "webpack-hot-middleware": "^2.6.0", - "zipstream": ">=0.2.1" + "webpack-hot-middleware": "^2.6.0" }, "scripts": { "start": "node devserver.js", "lint": "eslint src", - "build:unminified": "NODE_ENV=production webpack --config webpack.config.js", - "build:minified": "NODE_ENV=production MINIFIED=1 webpack --config webpack.config.js", - "build": "npm run build:unminified && npm run build:minified" + "build:unminified": "NODE_ENV=production webpack -d --config webpack.config.js", + "build:minified": "NODE_ENV=production MINIFIED=1 webpack -d --config webpack.config.js", + "build": "npm run build:unminified && npm run build:minified", + "test": "npm run lint" }, "repository": { "type": "git", diff --git a/release/flowchart.amd.js b/release/flowchart.amd.js deleted file mode 100644 index 29c57db6..00000000 --- a/release/flowchart.amd.js +++ /dev/null @@ -1,1427 +0,0 @@ -// flowchart, v1.4.2 -// Copyright (c)2015 Adriano Raiano (adrai). -// Distributed under MIT license -// http://adrai.github.io/flowchart.js -(function (root, factory) { - if (typeof exports === 'object') { - - module.exports = factory(); - - } else if (typeof define === 'function' && define.amd) { - - define([], factory); - - } -}(this, function () { - - // add indexOf to non ECMA-262 standard compliant browsers - if (!Array.prototype.indexOf) { - Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { - "use strict"; - if (this === null) { - throw new TypeError(); - } - var t = Object(this); - var len = t.length >>> 0; - if (len === 0) { - return -1; - } - var n = 0; - if (arguments.length > 0) { - n = Number(arguments[1]); - if (n != n) { // shortcut for verifying if it's NaN - n = 0; - } else if (n !== 0 && n != Infinity && n != -Infinity) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - } - if (n >= len) { - return -1; - } - var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); - for (; k < len; k++) { - if (k in t && t[k] === searchElement) { - return k; - } - } - return -1; - }; - } - - // add lastIndexOf to non ECMA-262 standard compliant browsers - if (!Array.prototype.lastIndexOf) { - Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) { - "use strict"; - if (this === null) { - throw new TypeError(); - } - var t = Object(this); - var len = t.length >>> 0; - if (len === 0) { - return -1; - } - var n = len; - if (arguments.length > 1) { - n = Number(arguments[1]); - if (n != n) { - n = 0; - } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - } - var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n); - for (; k >= 0; k--) { - if (k in t && t[k] === searchElement) { - return k; - } - } - return -1; - }; - } - - if (!String.prototype.trim) { - String.prototype.trim = function() { - return this.replace(/^\s+|\s+$/g, ''); - }; - } - - var root = this, - flowchart = {}; - - // defaults - var o = { - 'x': 0, - 'y': 0, - 'line-width': 3, - 'line-length': 50, - 'text-margin': 10, - 'font-size': 14, - 'font-color': 'black', - // 'font': 'normal', - // 'font-family': 'calibri', - // 'font-weight': 'normal', - 'line-color': 'black', - 'element-color': 'black', - 'fill': 'white', - 'yes-text': 'yes', - 'no-text': 'no', - 'arrow-end': 'block', - 'class': 'flowchart', - 'scale': 1, - 'symbols': { - 'start': {}, - 'end': {}, - 'condition': {}, - 'inputoutput': {}, - 'operation': {}, - 'subroutine': {} - }//, - // 'flowstate' : { - // 'past' : { 'fill': '#CCCCCC', 'font-size': 12}, - // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'}, - // 'future' : { 'fill': '#FFFF99'}, - // 'invalid': {'fill': '#444444'} - // } - }; - function _defaults(options, defaultOptions) { - if (!options || typeof options === 'function') { - return defaultOptions; - } - - var merged = {}; - for (var attrname in defaultOptions) { - merged[attrname] = defaultOptions[attrname]; - } - - for (attrname in options) { - if (options[attrname]) { - if (typeof merged[attrname] === 'object') { - merged[attrname] = _defaults(merged[attrname], options[attrname]); - } else { - merged[attrname] = options[attrname]; - } - } - } - return merged; - } - - function _inherits(ctor, superCtor) { - if (typeof(Object.create) === 'function') { - // implementation from standard node.js 'util' module - ctor.super_ = superCtor; - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - } else { - // old school shim for old browsers - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - } - - // move dependent functions to a container so that - // they can be overriden easier in no jquery environment (node.js) - var f = { - defaults: _defaults, - inherits: _inherits - }; - function drawPath(chart, location, points) { - var i, len; - var path = 'M{0},{1}'; - for (i = 2, len = 2 * points.length + 2; i < len; i+=2) { - path += ' L{' + i + '},{' + (i + 1) + '}'; - } - var pathValues = [location.x, location.y]; - for (i = 0, len = points.length; i < len; i++) { - pathValues.push(points[i].x); - pathValues.push(points[i].y); - } - var symbol = chart.paper.path(path, pathValues); - symbol.attr('stroke', chart.options['element-color']); - symbol.attr('stroke-width', chart.options['line-width']); - - var font = chart.options['font']; - var fontF = chart.options['font-family']; - var fontW = chart.options['font-weight']; - - if (font) symbol.attr({ 'font': font }); - if (fontF) symbol.attr({ 'font-family': fontF }); - if (fontW) symbol.attr({ 'font-weight': fontW }); - - return symbol; - } - - function drawLine(chart, from, to, text) { - var i, len; - - if (Object.prototype.toString.call(to) !== '[object Array]') { - to = [to]; - } - - var path = 'M{0},{1}'; - for (i = 2, len = 2 * to.length + 2; i < len; i+=2) { - path += ' L{' + i + '},{' + (i + 1) + '}'; - } - var pathValues = [from.x, from.y]; - for (i = 0, len = to.length; i < len; i++) { - pathValues.push(to[i].x); - pathValues.push(to[i].y); - } - - var line = chart.paper.path(path, pathValues); - line.attr({ - stroke: chart.options['line-color'], - 'stroke-width': chart.options['line-width'], - 'arrow-end': chart.options['arrow-end'] - }); - - var font = chart.options['font']; - var fontF = chart.options['font-family']; - var fontW = chart.options['font-weight']; - - if (font) line.attr({ 'font': font }); - if (fontF) line.attr({ 'font-family': fontF }); - if (fontW) line.attr({ 'font-weight': fontW }); - - if (text) { - - var centerText = false; - - var textPath = chart.paper.text(0, 0, text); - - var isHorizontal = false; - var firstTo = to[0]; - - if (from.y === firstTo.y) { - isHorizontal = true; - } - - var x = 0, - y = 0; - - if (centerText) { - if (from.x > firstTo.x) { - x = from.x - (from.x - firstTo.x)/2; - } else { - x = firstTo.x - (firstTo.x - from.x)/2; - } - - if (from.y > firstTo.y) { - y = from.y - (from.y - firstTo.y)/2; - } else { - y = firstTo.y - (firstTo.y - from.y)/2; - } - - if (isHorizontal) { - x -= textPath.getBBox().width/2; - y -= chart.options['text-margin']; - } else { - x += chart.options['text-margin']; - y -= textPath.getBBox().height/2; - } - } else { - x = from.x; - y = from.y; - - if (isHorizontal) { - x += chart.options['text-margin']/2; - y -= chart.options['text-margin']; - } else { - x += chart.options['text-margin']/2; - y += chart.options['text-margin']; - } - } - - textPath.attr({ - 'text-anchor': 'start', - 'font-size': chart.options['font-size'], - 'fill': chart.options['font-color'], - x: x, - y: y - }); - - if (font) textPath.attr({ 'font': font }); - if (fontF) textPath.attr({ 'font-family': fontF }); - if (fontW) textPath.attr({ 'font-weight': fontW }); - } - - return line; - } - - function checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) { - // 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 - var denominator, a, b, numerator1, numerator2, result = { - x: null, - y: null, - onLine1: false, - onLine2: false - }; - denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY)); - if (denominator === 0) { - return result; - } - a = line1StartY - line2StartY; - b = line1StartX - line2StartX; - numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b); - numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b); - a = numerator1 / denominator; - b = numerator2 / denominator; - - // if we cast these lines infinitely in both directions, they intersect here: - result.x = line1StartX + (a * (line1EndX - line1StartX)); - result.y = line1StartY + (a * (line1EndY - line1StartY)); - /* - // it is worth noting that this should be the same as: - x = line2StartX + (b * (line2EndX - line2StartX)); - y = line2StartX + (b * (line2EndY - line2StartY)); - */ - // if line1 is a segment and line2 is infinite, they intersect if: - if (a > 0 && a < 1) { - result.onLine1 = true; - } - // if line2 is a segment and line1 is infinite, they intersect if: - if (b > 0 && b < 1) { - result.onLine2 = true; - } - // if line1 and line2 are segments, they intersect if both of the above are true - return result; - } - function FlowChart(container, options) { - options = options || {}; - - this.paper = new Raphael(container); - - this.options = f.defaults(options, o); - - this.symbols = []; - this.lines = []; - this.start = null; - } - - FlowChart.prototype.handle = function(symbol) { - if (this.symbols.indexOf(symbol) <= -1) { - this.symbols.push(symbol); - } - - var flowChart = this; - - if (symbol instanceof(Condition)) { - symbol.yes = function(nextSymbol) { - symbol.yes_symbol = nextSymbol; - if(symbol.no_symbol) { - symbol.pathOk = true; - } - return flowChart.handle(nextSymbol); - }; - symbol.no = function(nextSymbol) { - symbol.no_symbol = nextSymbol; - if(symbol.yes_symbol) { - symbol.pathOk = true; - } - return flowChart.handle(nextSymbol); - }; - } else { - symbol.then = function(nextSymbol) { - symbol.next = nextSymbol; - symbol.pathOk = true; - return flowChart.handle(nextSymbol); - }; - } - - return symbol; - }; - - FlowChart.prototype.startWith = function(symbol) { - this.start = symbol; - return this.handle(symbol); - }; - - FlowChart.prototype.render = function() { - var maxWidth = 0, - maxHeight = 0, - i = 0, - len = 0, - maxX = 0, - maxY = 0, - symbol; - - for (i = 0, len = this.symbols.length; i < len; i++) { - symbol = this.symbols[i]; - if (symbol.width > maxWidth) { - maxWidth = symbol.width; - } - if (symbol.height > maxHeight) { - maxHeight = symbol.height; - } - } - - for (i = 0, len = this.symbols.length; i < len; i++) { - symbol = this.symbols[i]; - symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']); - symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']); - } - - this.start.render(); - // for (i = 0, len = this.symbols.length; i < len; i++) { - // symbol = this.symbols[i]; - // symbol.render(); - // } - - for (i = 0, len = this.symbols.length; i < len; i++) { - symbol = this.symbols[i]; - symbol.renderLines(); - } - - maxX = this.maxXFromLine; - - for (i = 0, len = this.symbols.length; i < len; i++) { - symbol = this.symbols[i]; - var x = symbol.getX() + symbol.width; - var y = symbol.getY() + symbol.height; - if (x > maxX) { - maxX = x; - } - if (y > maxY) { - maxY = y; - } - } - - var scale = this.options['scale']; - var lineWidth = this.options['line-width']; - this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale)); - this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, true); - }; - - FlowChart.prototype.clean = function() { - if (this.paper) { - var paperDom = this.paper.canvas; - paperDom.parentNode.removeChild(paperDom); - } - }; - function Symbol(chart, options, symbol) { - this.chart = chart; - this.group = this.chart.paper.set(); - this.symbol = symbol; - this.connectedTo = []; - this.symbolType = options.symbolType; - this.flowstate = (options.flowstate || 'future'); - - this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined; - - this.text = this.chart.paper.text(0, 0, options.text); - //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t - if (options.key) { this.text.node.id = options.key + 't'; } - this.text.node.setAttribute('class', this.getAttr('class') + 't'); - - this.text.attr({ - 'text-anchor': 'start', - 'x' : this.getAttr('text-margin'), - 'fill' : this.getAttr('font-color'), - 'font-size' : this.getAttr('font-size') - }); - - var font = this.getAttr('font'); - var fontF = this.getAttr('font-family'); - var fontW = this.getAttr('font-weight'); - - if (font) this.text.attr({ 'font': font }); - if (fontF) this.text.attr({ 'font-family': fontF }); - if (fontW) this.text.attr({ 'font-weight': fontW }); - - if (options.link) { this.text.attr('href', options.link); } - if (options.target) { this.text.attr('target', options.target); } - - var maxWidth = this.getAttr('maxWidth'); - if (maxWidth) { - // using this approach: http://stackoverflow.com/a/3153457/22466 - var words = options.text.split(' '); - var tempText = ""; - for (var i=0, ii=words.length; i maxWidth) { - tempText += "\n" + word; - } else { - tempText += " " + word; - } - } - this.text.attr("text", tempText.substring(1)); - } - - this.group.push(this.text); - - if (symbol) { - var tmpMargin = this.getAttr('text-margin'); - - symbol.attr({ - 'fill' : this.getAttr('fill'), - 'stroke' : this.getAttr('element-color'), - 'stroke-width' : this.getAttr('line-width'), - 'width' : this.text.getBBox().width + 2 * tmpMargin, - 'height' : this.text.getBBox().height + 2 * tmpMargin - }); - - symbol.node.setAttribute('class', this.getAttr('class')); - - if (options.link) { symbol.attr('href', options.link); } - if (options.target) { symbol.attr('target', options.target); } - if (options.key) { symbol.node.id = options.key; } - - this.group.push(symbol); - symbol.insertBefore(this.text); - - this.text.attr({ - 'y': symbol.getBBox().height/2 - }); - - this.initialize(); - } - - } - - /* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */ - Symbol.prototype.getAttr = function(attName) { - if (!this.chart) { - return undefined; - } - var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined; - var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined; - var opt1; - if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) { - opt1 = this.chart.options.flowstate[this.flowstate][attName]; - } - return (opt1 || opt2 || opt3); - }; - - Symbol.prototype.initialize = function() { - this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width')); - - this.width = this.group.getBBox().width; - this.height = this.group.getBBox().height; - }; - - Symbol.prototype.getCenter = function() { - return {x: this.getX() + this.width/2, - y: this.getY() + this.height/2}; - }; - - Symbol.prototype.getX = function() { - return this.group.getBBox().x; - }; - - Symbol.prototype.getY = function() { - return this.group.getBBox().y; - }; - - Symbol.prototype.shiftX = function(x) { - this.group.transform('t' + (this.getX() + x) + ',' + this.getY()); - }; - - Symbol.prototype.setX = function(x) { - this.group.transform('t' + x + ',' + this.getY()); - }; - - Symbol.prototype.shiftY = function(y) { - this.group.transform('t' + this.getX() + ',' + (this.getY() + y)); - }; - - Symbol.prototype.setY = function(y) { - this.group.transform('t' + this.getX() + ',' + y); - }; - - Symbol.prototype.getTop = function() { - var y = this.getY(); - var x = this.getX() + this.width/2; - return {x: x, y: y}; - }; - - Symbol.prototype.getBottom = function() { - var y = this.getY() + this.height; - var x = this.getX() + this.width/2; - return {x: x, y: y}; - }; - - Symbol.prototype.getLeft = function() { - var y = this.getY() + this.group.getBBox().height/2; - var x = this.getX(); - return {x: x, y: y}; - }; - - Symbol.prototype.getRight = function() { - var y = this.getY() + this.group.getBBox().height/2; - var x = this.getX() + this.group.getBBox().width; - return {x: x, y: y}; - }; - - Symbol.prototype.render = function() { - if (this.next) { - - var lineLength = this.getAttr('line-length'); - - if (this.next_direction === 'right') { - - var rightPoint = this.getRight(); - var leftPoint = this.next.getLeft(); - - if (!this.next.isPositioned) { - - this.next.setY(rightPoint.y - this.next.height/2); - this.next.shiftX(this.group.getBBox().x + this.width + lineLength); - - var self = this; - (function shift() { - var hasSymbolUnder = false; - var symb; - for (var i = 0, len = self.chart.symbols.length; i < len; i++) { - symb = self.chart.symbols[i]; - - var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x); - if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) { - hasSymbolUnder = true; - break; - } - } - - if (hasSymbolUnder) { - self.next.setX(symb.getX() + symb.width + lineLength); - shift(); - } - })(); - - this.next.isPositioned = true; - - this.next.render(); - } - } else { - var bottomPoint = this.getBottom(); - var topPoint = this.next.getTop(); - - if (!this.next.isPositioned) { - this.next.shiftY(this.getY() + this.height + lineLength); - this.next.setX(bottomPoint.x - this.next.width/2); - this.next.isPositioned = true; - - this.next.render(); - } - } - } - }; - - Symbol.prototype.renderLines = function() { - if (this.next) { - if (this.next_direction) { - this.drawLineTo(this.next, '', this.next_direction); - } else { - this.drawLineTo(this.next); - } - } - }; - - Symbol.prototype.drawLineTo = function(symbol, text, origin) { - if (this.connectedTo.indexOf(symbol) < 0) { - this.connectedTo.push(symbol); - } - - var x = this.getCenter().x, - y = this.getCenter().y, - top = this.getTop(), - right = this.getRight(), - bottom = this.getBottom(), - left = this.getLeft(); - - var symbolX = symbol.getCenter().x, - symbolY = symbol.getCenter().y, - symbolTop = symbol.getTop(), - symbolRight = symbol.getRight(), - symbolBottom = symbol.getBottom(), - symbolLeft = symbol.getLeft(); - - var isOnSameColumn = x === symbolX, - isOnSameLine = y === symbolY, - isUnder = y < symbolY, - isUpper = y > symbolY, - isLeft = x > symbolX, - isRight = x < symbolX; - - var maxX = 0, - line, - lineLength = this.getAttr('line-length'), - lineWith = this.getAttr('line-width'); - - if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) { - line = drawLine(this.chart, bottom, symbolTop, text); - this.bottomStart = true; - symbol.topEnd = true; - maxX = bottom.x; - } else if ((!origin || origin === 'right') && isOnSameLine && isRight) { - line = drawLine(this.chart, right, symbolLeft, text); - this.rightStart = true; - symbol.leftEnd = true; - maxX = symbolLeft.x; - } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) { - line = drawLine(this.chart, left, symbolRight, text); - this.leftStart = true; - symbol.rightEnd = true; - maxX = symbolRight.x; - } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) { - line = drawLine(this.chart, right, [ - {x: right.x + lineLength/2, y: right.y}, - {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.rightStart = true; - symbol.topEnd = true; - maxX = right.x + lineLength/2; - } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) { - line = drawLine(this.chart, right, [ - {x: right.x + lineLength/2, y: right.y}, - {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.rightStart = true; - symbol.topEnd = true; - maxX = right.x + lineLength/2; - } else if ((!origin || origin === 'bottom') && isLeft) { - if (this.leftEnd && isUpper) { - line = drawLine(this.chart, bottom, [ - {x: bottom.x, y: bottom.y + lineLength/2}, - {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2}, - {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - } else { - line = drawLine(this.chart, bottom, [ - {x: bottom.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - } - this.bottomStart = true; - symbol.topEnd = true; - maxX = bottom.x + (bottom.x - symbolTop.x)/2; - } else if ((!origin || origin === 'bottom') && isRight) { - line = drawLine(this.chart, bottom, [ - {x: bottom.x, y: bottom.y + lineLength/2}, - {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2}, - {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.bottomStart = true; - symbol.topEnd = true; - maxX = bottom.x + (bottom.x - symbolTop.x)/2; - } else if ((origin && origin === 'right') && isLeft) { - line = drawLine(this.chart, right, [ - {x: right.x + lineLength/2, y: right.y}, - {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.rightStart = true; - symbol.topEnd = true; - maxX = right.x + lineLength/2; - } else if ((origin && origin === 'right') && isRight) { - line = drawLine(this.chart, right, [ - {x: symbolTop.x, y: right.y}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.rightStart = true; - symbol.topEnd = true; - maxX = right.x + lineLength/2; - } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) { - line = drawLine(this.chart, bottom, [ - {x: bottom.x, y: bottom.y + lineLength/2}, - {x: right.x + lineLength/2, y: bottom.y + lineLength/2}, - {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.bottomStart = true; - symbol.topEnd = true; - maxX = bottom.x + lineLength/2; - } else if ((origin === 'left') && isOnSameColumn && isUpper) { - var diffX = left.x - lineLength/2; - if (symbolLeft.x < left.x) { - diffX = symbolLeft.x - lineLength/2; - } - line = drawLine(this.chart, left, [ - {x: diffX, y: left.y}, - {x: diffX, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.leftStart = true; - symbol.topEnd = true; - maxX = left.x; - } else if ((origin === 'left')) { - line = drawLine(this.chart, left, [ - {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y}, - {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.leftStart = true; - symbol.topEnd = true; - maxX = left.x; - } - - if (line) { - var self = this; - for (var l = 0, llen = this.chart.lines.length; l < llen; l++) { - var otherLine = this.chart.lines[l]; - var i, - len, - intersections, - inter; - - var ePath = otherLine.attr('path'), - lPath = line.attr('path'); - - for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) { - var newPath = []; - newPath.push(['M', ePath[iP][1], ePath[iP][2]]); - newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]); - - var line1_from_x = newPath[0][1]; - var line1_from_y = newPath[0][2]; - var line1_to_x = newPath[1][1]; - var line1_to_y = newPath[1][2]; - - for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) { - var newLinePath = []; - newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]); - newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]); - - var line2_from_x = newLinePath[0][1]; - var line2_from_y = newLinePath[0][2]; - var line2_to_x = newLinePath[1][1]; - var line2_to_y = newLinePath[1][2]; - - 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); - if (res.onLine1 && res.onLine2) { - - var newSegment; - if (line2_from_y === line2_to_y) { - if (line2_from_x > line2_to_x) { - newSegment = ['L', res.x + lineWith * 2, line2_from_y]; - lPath.splice(lP + 1, 0, newSegment); - newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y]; - lPath.splice(lP + 2, 0, newSegment); - line.attr('path', lPath); - } else { - newSegment = ['L', res.x - lineWith * 2, line2_from_y]; - lPath.splice(lP + 1, 0, newSegment); - newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y]; - lPath.splice(lP + 2, 0, newSegment); - line.attr('path', lPath); - } - } else { - if (line2_from_y > line2_to_y) { - newSegment = ['L', line2_from_x, res.y + lineWith * 2]; - lPath.splice(lP + 1, 0, newSegment); - newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2]; - lPath.splice(lP + 2, 0, newSegment); - line.attr('path', lPath); - } else { - newSegment = ['L', line2_from_x, res.y - lineWith * 2]; - lPath.splice(lP + 1, 0, newSegment); - newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2]; - lPath.splice(lP + 2, 0, newSegment); - line.attr('path', lPath); - } - } - - lP += 2; - len += 2; - } - } - } - } - - this.chart.lines.push(line); - } - - if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) { - this.chart.maxXFromLine = maxX; - } - }; - function Start(chart, options) { - var symbol = chart.paper.rect(0, 0, 0, 0, 20); - options = options || {}; - options.text = options.text || 'Start'; - Symbol.call(this, chart, options, symbol); - } - f.inherits(Start, Symbol); - - - // Start.prototype.render = function() { - // if (this.next) { - // var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length']; - - // var bottomPoint = this.getBottom(); - // var topPoint = this.next.getTop(); - - // if (!this.next.isPositioned) { - // this.next.shiftY(this.getY() + this.height + lineLength); - // this.next.setX(bottomPoint.x - this.next.width/2); - // this.next.isPositioned = true; - - // this.next.render(); - // } - // } - // }; - - // Start.prototype.renderLines = function() { - // if (this.next) { - // this.drawLineTo(this.next); - // } - // }; - function End(chart, options) { - var symbol = chart.paper.rect(0, 0, 0, 0, 20); - options = options || {}; - options.text = options.text || 'End'; - Symbol.call(this, chart, options, symbol); - } - f.inherits(End, Symbol); - function Operation(chart, options) { - var symbol = chart.paper.rect(0, 0, 0, 0); - options = options || {}; - Symbol.call(this, chart, options, symbol); - } - f.inherits(Operation, Symbol); - function Subroutine(chart, options) { - var symbol = chart.paper.rect(0, 0, 0, 0); - options = options || {}; - Symbol.call(this, chart, options, symbol); - - symbol.attr({ - width: this.text.getBBox().width + 4 * this.getAttr('text-margin') - }); - - this.text.attr({ - 'x': 2 * this.getAttr('text-margin') - }); - - var innerWrap = chart.paper.rect(0, 0, 0, 0); - innerWrap.attr({ - x: this.getAttr('text-margin'), - stroke: this.getAttr('element-color'), - 'stroke-width': this.getAttr('line-width'), - width: this.text.getBBox().width + 2 * this.getAttr('text-margin'), - height: this.text.getBBox().height + 2 * this.getAttr('text-margin'), - fill: this.getAttr('fill') - }); - if (options.key) { innerWrap.node.id = options.key + 'i'; } - - var font = this.getAttr('font'); - var fontF = this.getAttr('font-family'); - var fontW = this.getAttr('font-weight'); - - if (font) innerWrap.attr({ 'font': font }); - if (fontF) innerWrap.attr({ 'font-family': fontF }); - if (fontW) innerWrap.attr({ 'font-weight': fontW }); - - if (options.link) { innerWrap.attr('href', options.link); } - if (options.target) { innerWrap.attr('target', options.target); } - this.group.push(innerWrap); - innerWrap.insertBefore(this.text); - - this.initialize(); - } - f.inherits(Subroutine, Symbol); - function InputOutput(chart, options) { - options = options || {}; - Symbol.call(this, chart, options); - this.textMargin = this.getAttr('text-margin'); - - this.text.attr({ - x: this.textMargin * 3 - }); - - var width = this.text.getBBox().width + 4 * this.textMargin; - var height = this.text.getBBox().height + 2 * this.textMargin; - var startX = this.textMargin; - var startY = height/2; - - var start = {x: startX, y: startY}; - var points = [ - {x: startX - this.textMargin, y: height}, - {x: startX - this.textMargin + width, y: height}, - {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0}, - {x: startX - this.textMargin + 2 * this.textMargin, y: 0}, - {x: startX, y: startY} - ]; - - var symbol = drawPath(chart, start, points); - - symbol.attr({ - stroke: this.getAttr('element-color'), - 'stroke-width': this.getAttr('line-width'), - fill: this.getAttr('fill') - }); - if (options.link) { symbol.attr('href', options.link); } - if (options.target) { symbol.attr('target', options.target); } - if (options.key) { symbol.node.id = options.key; } - symbol.node.setAttribute('class', this.getAttr('class')); - - this.text.attr({ - y: symbol.getBBox().height/2 - }); - - this.group.push(symbol); - symbol.insertBefore(this.text); - - this.initialize(); - } - f.inherits(InputOutput, Symbol); - - InputOutput.prototype.getLeft = function() { - var y = this.getY() + this.group.getBBox().height/2; - var x = this.getX() + this.textMargin; - return {x: x, y: y}; - }; - - InputOutput.prototype.getRight = function() { - var y = this.getY() + this.group.getBBox().height/2; - var x = this.getX() + this.group.getBBox().width - this.textMargin; - return {x: x, y: y}; - }; - function Condition(chart, options) { - options = options || {}; - Symbol.call(this, chart, options); - this.textMargin = this.getAttr('text-margin'); - this.yes_direction = 'bottom'; - this.no_direction = 'right'; - if (options.yes && options['direction_yes'] && options.no && !options['direction_no']) { - if (options['direction_yes'] === 'right') { - this.no_direction = 'bottom'; - this.yes_direction = 'right'; - } else { - this.no_direction = 'right'; - this.yes_direction = 'bottom'; - } - } else if (options.yes && !options['direction_yes'] && options.no && options['direction_no']) { - if (options['direction_no'] === 'right') { - this.yes_direction = 'bottom'; - this.no_direction = 'right'; - } else { - this.yes_direction = 'right'; - this.no_direction = 'bottom'; - } - } else { - this.yes_direction = 'bottom'; - this.no_direction = 'right'; - } - - this.yes_direction = this.yes_direction || 'bottom'; - this.no_direction = this.no_direction || 'right'; - - this.text.attr({ - x: this.textMargin * 2 - }); - - var width = this.text.getBBox().width + 3 * this.textMargin; - width += width/2; - var height = this.text.getBBox().height + 2 * this.textMargin; - height += height/2; - height = Math.max(width * 0.5, height); - var startX = width/4; - var startY = height/4; - - this.text.attr({ - x: startX + this.textMargin/2 - }); - - var start = {x: startX, y: startY}; - var points = [ - {x: startX - width/4, y: startY + height/4}, - {x: startX - width/4 + width/2, y: startY + height/4 + height/2}, - {x: startX - width/4 + width, y: startY + height/4}, - {x: startX - width/4 + width/2, y: startY + height/4 - height/2}, - {x: startX - width/4, y: startY + height/4} - ]; - - var symbol = drawPath(chart, start, points); - - symbol.attr({ - stroke: this.getAttr('element-color'), - 'stroke-width': this.getAttr('line-width'), - fill: this.getAttr('fill') - }); - if (options.link) { symbol.attr('href', options.link); } - if (options.target) { symbol.attr('target', options.target); } - if (options.key) { symbol.node.id = options.key; } - symbol.node.setAttribute('class', this.getAttr('class')); - - this.text.attr({ - y: symbol.getBBox().height/2 - }); - - this.group.push(symbol); - symbol.insertBefore(this.text); - - this.initialize(); - } - f.inherits(Condition, Symbol); - - Condition.prototype.render = function() { - - if (this.yes_direction) { - this[this.yes_direction + '_symbol'] = this.yes_symbol; - } - - if (this.no_direction) { - this[this.no_direction + '_symbol'] = this.no_symbol; - } - - var lineLength = this.getAttr('line-length'); - - if (this.bottom_symbol) { - var bottomPoint = this.getBottom(); - var topPoint = this.bottom_symbol.getTop(); - - if (!this.bottom_symbol.isPositioned) { - this.bottom_symbol.shiftY(this.getY() + this.height + lineLength); - this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2); - this.bottom_symbol.isPositioned = true; - - this.bottom_symbol.render(); - } - } - - if (this.right_symbol) { - var rightPoint = this.getRight(); - var leftPoint = this.right_symbol.getLeft(); - - if (!this.right_symbol.isPositioned) { - - this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2); - this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength); - - var self = this; - (function shift() { - var hasSymbolUnder = false; - var symb; - for (var i = 0, len = self.chart.symbols.length; i < len; i++) { - symb = self.chart.symbols[i]; - - var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); - if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) { - hasSymbolUnder = true; - break; - } - } - - if (hasSymbolUnder) { - self.right_symbol.setX(symb.getX() + symb.width + lineLength); - shift(); - } - })(); - - this.right_symbol.isPositioned = true; - - this.right_symbol.render(); - } - } - }; - - Condition.prototype.renderLines = function() { - if (this.yes_symbol) { - this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction); - } - - if (this.no_symbol) { - this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction); - } - }; - function parse(input) { - input = input || ''; - input = input.trim(); - - var chart = { - symbols: {}, - start: null, - drawSVG: function(container, options) { - var self = this; - - if (this.diagram) { - this.diagram.clean(); - } - - var diagram = new FlowChart(container, options); - this.diagram = diagram; - var dispSymbols = {}; - - function getDisplaySymbol(s) { - if (dispSymbols[s.key]) { - return dispSymbols[s.key]; - } - - switch (s.symbolType) { - case 'start': - dispSymbols[s.key] = new Start(diagram, s); - break; - case 'end': - dispSymbols[s.key] = new End(diagram, s); - break; - case 'operation': - dispSymbols[s.key] = new Operation(diagram, s); - break; - case 'inputoutput': - dispSymbols[s.key] = new InputOutput(diagram, s); - break; - case 'subroutine': - dispSymbols[s.key] = new Subroutine(diagram, s); - break; - case 'condition': - dispSymbols[s.key] = new Condition(diagram, s); - break; - default: - return new Error('Wrong symbol type!'); - } - - return dispSymbols[s.key]; - } - - (function constructChart(s, prevDisp, prev) { - var dispSymb = getDisplaySymbol(s); - - if (self.start === s) { - diagram.startWith(dispSymb); - } else if (prevDisp && prev && !prevDisp.pathOk) { - if (prevDisp instanceof(Condition)) { - if (prev.yes === s) { - prevDisp.yes(dispSymb); - } - if (prev.no === s) { - prevDisp.no(dispSymb); - } - } else { - prevDisp.then(dispSymb); - } - } - - if (dispSymb.pathOk) { - return dispSymb; - } - - if (dispSymb instanceof(Condition)) { - if (s.yes) { - constructChart(s.yes, dispSymb, s); - } - if (s.no) { - constructChart(s.no, dispSymb, s); - } - } else if (s.next) { - constructChart(s.next, dispSymb, s); - } - - return dispSymb; - })(this.start); - - diagram.render(); - }, - clean: function() { - this.diagram.clean(); - } - }; - - var lines = []; - var prevBreak = 0; - for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) { - if(input[i0] === '\n' && input[i0 - 1] !== '\\') { - var line0 = input.substring(prevBreak, i0); - prevBreak = i0 + 1; - lines.push(line0.replace(/\\\n/g, '\n')); - } - } - - if(prevBreak < input.length) { - lines.push(input.substr(prevBreak)); - } - - for (var l = 1, len = lines.length; l < len;) { - var currentLine = lines[l]; - - if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) { - lines[l - 1] += '\n' + currentLine; - lines.splice(l, 1); - len--; - } else { - l++; - } - } - - function getSymbol(s) { - var startIndex = s.indexOf('(') + 1; - var endIndex = s.indexOf(')'); - if (startIndex >= 0 && endIndex >= 0) { - return chart.symbols[s.substring(0, startIndex - 1)]; - } - return chart.symbols[s]; - } - - function getNextPath(s) { - var next = 'next'; - var startIndex = s.indexOf('(') + 1; - var endIndex = s.indexOf(')'); - if (startIndex >= 0 && endIndex >= 0) { - next = flowSymb.substring(startIndex, endIndex); - if (next.indexOf(',') < 0) { - if (next !== 'yes' && next !== 'no') { - next = 'next, ' + next; - } - } - } - return next; - } - - while (lines.length > 0) { - var line = lines.splice(0, 1)[0]; - - if (line.indexOf('=>') >= 0) { - // definition - var parts = line.split('=>'); - var symbol = { - key: parts[0], - symbolType: parts[1], - text: null, - link: null, - target: null, - flowstate: null - }; - - var sub; - - if (symbol.symbolType.indexOf(': ') >= 0) { - sub = symbol.symbolType.split(': '); - symbol.symbolType = sub.shift(); - symbol.text = sub.join(': '); - } - - if (symbol.text && symbol.text.indexOf(':>') >= 0) { - sub = symbol.text.split(':>'); - symbol.text = sub.shift(); - symbol.link = sub.join(':>'); - } else if (symbol.symbolType.indexOf(':>') >= 0) { - sub = symbol.symbolType.split(':>'); - symbol.symbolType = sub.shift(); - symbol.link = sub.join(':>'); - } - - if (symbol.symbolType.indexOf('\n') >= 0) { - symbol.symbolType = symbol.symbolType.split('\n')[0]; - } - - /* adding support for links */ - if (symbol.link) { - var startIndex = symbol.link.indexOf('[') + 1; - var endIndex = symbol.link.indexOf(']'); - if (startIndex >= 0 && endIndex >= 0) { - symbol.target = symbol.link.substring(startIndex, endIndex); - symbol.link = symbol.link.substring(0, startIndex - 1); - } - } - /* end of link support */ - - /* adding support for flowstates */ - if (symbol.text) { - if (symbol.text.indexOf('|') >= 0) { - var txtAndState = symbol.text.split('|'); - symbol.flowstate = txtAndState.pop().trim(); - symbol.text = txtAndState.join('|'); - } - } - /* end of flowstate support */ - - chart.symbols[symbol.key] = symbol; - - } else if (line.indexOf('->') >= 0) { - // flow - var flowSymbols = line.split('->'); - for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) { - var flowSymb = flowSymbols[i]; - - var realSymb = getSymbol(flowSymb); - var next = getNextPath(flowSymb); - - var direction = null; - if (next.indexOf(',') >= 0) { - var condOpt = next.split(','); - next = condOpt[0]; - direction = condOpt[1].trim(); - } - - if (!chart.start) { - chart.start = realSymb; - } - - if (i + 1 < lenS) { - var nextSymb = flowSymbols[i + 1]; - realSymb[next] = getSymbol(nextSymb); - realSymb['direction_' + next] = direction; - direction = null; - } - } - } - - } - return chart; - } - // public api interface - flowchart.parse = parse; - - return flowchart; - -})); \ No newline at end of file diff --git a/release/flowchart.amd.min.js b/release/flowchart.amd.min.js deleted file mode 100644 index f2f54dcb..00000000 --- a/release/flowchart.amd.min.js +++ /dev/null @@ -1,7 +0,0 @@ -// flowchart, v1.4.2 -// Copyright (c)2015 Adriano Raiano (adrai). -// Distributed under MIT license -// http://adrai.github.io/flowchart.js - -!function(a,b){"object"==typeof exports?module.exports=b():"function"==typeof define&&define.amd&&define([],b)}(this,function(){function a(b,c){if(!b||"function"==typeof b)return c;var d={};for(var e in c)d[e]=c[e];for(e in b)b[e]&&("object"==typeof d[e]?d[e]=a(d[e],b[e]):d[e]=b[e]);return d}function b(a,b){if("function"==typeof Object.create)a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}});else{a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}}function c(a,b,c){var d,e,f="M{0},{1}";for(d=2,e=2*c.length+2;e>d;d+=2)f+=" L{"+d+"},{"+(d+1)+"}";var g=[b.x,b.y];for(d=0,e=c.length;e>d;d++)g.push(c[d].x),g.push(c[d].y);var h=a.paper.path(f,g);h.attr("stroke",a.options["element-color"]),h.attr("stroke-width",a.options["line-width"]);var i=a.options.font,j=a.options["font-family"],k=a.options["font-weight"];return i&&h.attr({font:i}),j&&h.attr({"font-family":j}),k&&h.attr({"font-weight":k}),h}function d(a,b,c,d){var e,f;"[object Array]"!==Object.prototype.toString.call(c)&&(c=[c]);var g="M{0},{1}";for(e=2,f=2*c.length+2;f>e;e+=2)g+=" L{"+e+"},{"+(e+1)+"}";var h=[b.x,b.y];for(e=0,f=c.length;f>e;e++)h.push(c[e].x),h.push(c[e].y);var i=a.paper.path(g,h);i.attr({stroke:a.options["line-color"],"stroke-width":a.options["line-width"],"arrow-end":a.options["arrow-end"]});var j=a.options.font,k=a.options["font-family"],l=a.options["font-weight"];if(j&&i.attr({font:j}),k&&i.attr({"font-family":k}),l&&i.attr({"font-weight":l}),d){var m=!1,n=a.paper.text(0,0,d),o=!1,p=c[0];b.y===p.y&&(o=!0);var q=0,r=0;m?(q=b.x>p.x?b.x-(b.x-p.x)/2:p.x-(p.x-b.x)/2,r=b.y>p.y?b.y-(b.y-p.y)/2:p.y-(p.y-b.y)/2,o?(q-=n.getBBox().width/2,r-=a.options["text-margin"]):(q+=a.options["text-margin"],r-=n.getBBox().height/2)):(q=b.x,r=b.y,o?(q+=a.options["text-margin"]/2,r-=a.options["text-margin"]):(q+=a.options["text-margin"]/2,r+=a.options["text-margin"])),n.attr({"text-anchor":"start","font-size":a.options["font-size"],fill:a.options["font-color"],x:q,y:r}),j&&n.attr({font:j}),k&&n.attr({"font-family":k}),l&&n.attr({"font-weight":l})}return i}function e(a,b,c,d,e,f,g,h){var i,j,k,l,m,n={x:null,y:null,onLine1:!1,onLine2:!1};return i=(h-f)*(c-a)-(g-e)*(d-b),0===i?n:(j=b-f,k=a-e,l=(g-e)*j-(h-f)*k,m=(c-a)*j-(d-b)*k,j=l/i,k=m/i,n.x=a+j*(c-a),n.y=b+j*(d-b),j>0&&1>j&&(n.onLine1=!0),k>0&&1>k&&(n.onLine2=!0),n)}function f(a,b){b=b||{},this.paper=new Raphael(a),this.options=q.defaults(b,p),this.symbols=[],this.lines=[],this.start=null}function g(a,b,c){this.chart=a,this.group=this.chart.paper.set(),this.symbol=c,this.connectedTo=[],this.symbolType=b.symbolType,this.flowstate=b.flowstate||"future",this.next_direction=b.next&&b.direction_next?b.direction_next:void 0,this.text=this.chart.paper.text(0,0,b.text),b.key&&(this.text.node.id=b.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var d=this.getAttr("font"),e=this.getAttr("font-family"),f=this.getAttr("font-weight");d&&this.text.attr({font:d}),e&&this.text.attr({"font-family":e}),f&&this.text.attr({"font-weight":f}),b.link&&this.text.attr("href",b.link),b.target&&this.text.attr("target",b.target);var g=this.getAttr("maxWidth");if(g){for(var h=b.text.split(" "),i="",j=0,k=h.length;k>j;j++){var l=h[j];this.text.attr("text",i+" "+l),i+=this.text.getBBox().width>g?"\n"+l:" "+l}this.text.attr("text",i.substring(1))}if(this.group.push(this.text),c){var m=this.getAttr("text-margin");c.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*m,height:this.text.getBBox().height+2*m}),c.node.setAttribute("class",this.getAttr("class")),b.link&&c.attr("href",b.link),b.target&&c.attr("target",b.target),b.key&&(c.node.id=b.key),this.group.push(c),c.insertBefore(this.text),this.text.attr({y:c.getBBox().height/2}),this.initialize()}}function h(a,b){var c=a.paper.rect(0,0,0,0,20);b=b||{},b.text=b.text||"Start",g.call(this,a,b,c)}function i(a,b){var c=a.paper.rect(0,0,0,0,20);b=b||{},b.text=b.text||"End",g.call(this,a,b,c)}function j(a,b){var c=a.paper.rect(0,0,0,0);b=b||{},g.call(this,a,b,c)}function k(a,b){var c=a.paper.rect(0,0,0,0);b=b||{},g.call(this,a,b,c),c.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var d=a.paper.rect(0,0,0,0);d.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),b.key&&(d.node.id=b.key+"i");var e=this.getAttr("font"),f=this.getAttr("font-family"),h=this.getAttr("font-weight");e&&d.attr({font:e}),f&&d.attr({"font-family":f}),h&&d.attr({"font-weight":h}),b.link&&d.attr("href",b.link),b.target&&d.attr("target",b.target),this.group.push(d),d.insertBefore(this.text),this.initialize()}function l(a,b){b=b||{},g.call(this,a,b),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var d=this.text.getBBox().width+4*this.textMargin,e=this.text.getBBox().height+2*this.textMargin,f=this.textMargin,h=e/2,i={x:f,y:h},j=[{x:f-this.textMargin,y:e},{x:f-this.textMargin+d,y:e},{x:f-this.textMargin+d+2*this.textMargin,y:0},{x:f-this.textMargin+2*this.textMargin,y:0},{x:f,y:h}],k=c(a,i,j);k.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),b.link&&k.attr("href",b.link),b.target&&k.attr("target",b.target),b.key&&(k.node.id=b.key),k.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:k.getBBox().height/2}),this.group.push(k),k.insertBefore(this.text),this.initialize()}function m(a,b){b=b||{},g.call(this,a,b),this.textMargin=this.getAttr("text-margin"),this.yes_direction="bottom",this.no_direction="right",b.yes&&b.direction_yes&&b.no&&!b.direction_no?"right"===b.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):(this.no_direction="right",this.yes_direction="bottom"):b.yes&&!b.direction_yes&&b.no&&b.direction_no?"right"===b.direction_no?(this.yes_direction="bottom",this.no_direction="right"):(this.yes_direction="right",this.no_direction="bottom"):(this.yes_direction="bottom",this.no_direction="right"),this.yes_direction=this.yes_direction||"bottom",this.no_direction=this.no_direction||"right",this.text.attr({x:2*this.textMargin});var d=this.text.getBBox().width+3*this.textMargin;d+=d/2;var e=this.text.getBBox().height+2*this.textMargin;e+=e/2,e=Math.max(.5*d,e);var f=d/4,h=e/4;this.text.attr({x:f+this.textMargin/2});var i={x:f,y:h},j=[{x:f-d/4,y:h+e/4},{x:f-d/4+d/2,y:h+e/4+e/2},{x:f-d/4+d,y:h+e/4},{x:f-d/4+d/2,y:h+e/4-e/2},{x:f-d/4,y:h+e/4}],k=c(a,i,j);k.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),b.link&&k.attr("href",b.link),b.target&&k.attr("target",b.target),b.key&&(k.node.id=b.key),k.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:k.getBBox().height/2}),this.group.push(k),k.insertBefore(this.text),this.initialize()}function n(a){function b(a){var b=a.indexOf("(")+1,c=a.indexOf(")");return b>=0&&c>=0?d.symbols[a.substring(0,b-1)]:d.symbols[a]}function c(a){var b="next",c=a.indexOf("(")+1,d=a.indexOf(")");return c>=0&&d>=0&&(b=D.substring(c,d),b.indexOf(",")<0&&"yes"!==b&&"no"!==b&&(b="next, "+b)),b}a=a||"",a=a.trim();for(var d={symbols:{},start:null,drawSVG:function(a,b){function c(a){if(g[a.key])return g[a.key];switch(a.symbolType){case"start":g[a.key]=new h(e,a);break;case"end":g[a.key]=new i(e,a);break;case"operation":g[a.key]=new j(e,a);break;case"inputoutput":g[a.key]=new l(e,a);break;case"subroutine":g[a.key]=new k(e,a);break;case"condition":g[a.key]=new m(e,a);break;default:return new Error("Wrong symbol type!")}return g[a.key]}var d=this;this.diagram&&this.diagram.clean();var e=new f(a,b);this.diagram=e;var g={};!function n(a,b,f){var g=c(a);return d.start===a?e.startWith(g):b&&f&&!b.pathOk&&(b instanceof m?(f.yes===a&&b.yes(g),f.no===a&&b.no(g)):b.then(g)),g.pathOk?g:(g instanceof m?(a.yes&&n(a.yes,g,a),a.no&&n(a.no,g,a)):a.next&&n(a.next,g,a),g)}(this.start),e.render()},clean:function(){this.diagram.clean()}},e=[],g=0,n=1,o=a.length;o>n;n++)if("\n"===a[n]&&"\\"!==a[n-1]){var p=a.substring(g,n);g=n+1,e.push(p.replace(/\\\n/g,"\n"))}gq;){var s=e[q];s.indexOf("->")<0&&s.indexOf("=>")<0?(e[q-1]+="\n"+s,e.splice(q,1),r--):q++}for(;e.length>0;){var t=e.splice(0,1)[0];if(t.indexOf("=>")>=0){var u,v=t.split("=>"),w={key:v[0],symbolType:v[1],text:null,link:null,target:null,flowstate:null};if(w.symbolType.indexOf(": ")>=0&&(u=w.symbolType.split(": "),w.symbolType=u.shift(),w.text=u.join(": ")),w.text&&w.text.indexOf(":>")>=0?(u=w.text.split(":>"),w.text=u.shift(),w.link=u.join(":>")):w.symbolType.indexOf(":>")>=0&&(u=w.symbolType.split(":>"),w.symbolType=u.shift(),w.link=u.join(":>")),w.symbolType.indexOf("\n")>=0&&(w.symbolType=w.symbolType.split("\n")[0]),w.link){var x=w.link.indexOf("[")+1,y=w.link.indexOf("]");x>=0&&y>=0&&(w.target=w.link.substring(x,y),w.link=w.link.substring(0,x-1))}if(w.text&&w.text.indexOf("|")>=0){var z=w.text.split("|");w.flowstate=z.pop().trim(),w.text=z.join("|")}d.symbols[w.key]=w}else if(t.indexOf("->")>=0)for(var A=t.split("->"),B=0,C=A.length;C>B;B++){var D=A[B],E=b(D),F=c(D),G=null;if(F.indexOf(",")>=0){var H=F.split(",");F=H[0],G=H[1].trim()}if(d.start||(d.start=E),C>B+1){var I=A[B+1];E[F]=b(I),E["direction_"+F]=G,G=null}}}return d}Array.prototype.indexOf||(Array.prototype.indexOf=function(a){"use strict";if(null===this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=0;if(arguments.length>0&&(d=Number(arguments[1]),d!=d?d=0:0!==d&&d!=1/0&&d!=-(1/0)&&(d=(d>0||-1)*Math.floor(Math.abs(d)))),d>=c)return-1;for(var e=d>=0?d:Math.max(c-Math.abs(d),0);c>e;e++)if(e in b&&b[e]===a)return e;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(a){"use strict";if(null===this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=c;arguments.length>1&&(d=Number(arguments[1]),d!=d?d=0:0!==d&&d!=1/0&&d!=-(1/0)&&(d=(d>0||-1)*Math.floor(Math.abs(d))));for(var e=d>=0?Math.min(d,c-1):c-Math.abs(d);e>=0;e--)if(e in b&&b[e]===a)return e;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")});var o={},p={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}},q={defaults:a,inherits:b};return f.prototype.handle=function(a){this.symbols.indexOf(a)<=-1&&this.symbols.push(a);var b=this;return a instanceof m?(a.yes=function(c){return a.yes_symbol=c,a.no_symbol&&(a.pathOk=!0),b.handle(c)},a.no=function(c){return a.no_symbol=c,a.yes_symbol&&(a.pathOk=!0),b.handle(c)}):a.then=function(c){return a.next=c,a.pathOk=!0,b.handle(c)},a},f.prototype.startWith=function(a){return this.start=a,this.handle(a)},f.prototype.render=function(){var a,b=0,c=0,d=0,e=0,f=0,g=0;for(d=0,e=this.symbols.length;e>d;d++)a=this.symbols[d],a.width>b&&(b=a.width),a.height>c&&(c=a.height);for(d=0,e=this.symbols.length;e>d;d++)a=this.symbols[d],a.shiftX(this.options.x+(b-a.width)/2+this.options["line-width"]),a.shiftY(this.options.y+(c-a.height)/2+this.options["line-width"]);for(this.start.render(),d=0,e=this.symbols.length;e>d;d++)a=this.symbols[d],a.renderLines();for(f=this.maxXFromLine,d=0,e=this.symbols.length;e>d;d++){a=this.symbols[d];var h=a.getX()+a.width,i=a.getY()+a.height;h>f&&(f=h),i>g&&(g=i)}var j=this.options.scale,k=this.options["line-width"];this.paper.setSize(f*j+k*j,g*j+k*j),this.paper.setViewBox(0,0,f+k,g+k,!0)},f.prototype.clean=function(){if(this.paper){var a=this.paper.canvas;a.parentNode.removeChild(a)}},g.prototype.getAttr=function(a){if(!this.chart)return void 0;var b,c=this.chart.options?this.chart.options[a]:void 0,d=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][a]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(b=this.chart.options.flowstate[this.flowstate][a]),b||d||c},g.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},g.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},g.prototype.getX=function(){return this.group.getBBox().x},g.prototype.getY=function(){return this.group.getBBox().y},g.prototype.shiftX=function(a){this.group.transform("t"+(this.getX()+a)+","+this.getY())},g.prototype.setX=function(a){this.group.transform("t"+a+","+this.getY())},g.prototype.shiftY=function(a){this.group.transform("t"+this.getX()+","+(this.getY()+a))},g.prototype.setY=function(a){this.group.transform("t"+this.getX()+","+a)},g.prototype.getTop=function(){var a=this.getY(),b=this.getX()+this.width/2;return{x:b,y:a}},g.prototype.getBottom=function(){var a=this.getY()+this.height,b=this.getX()+this.width/2;return{x:b,y:a}},g.prototype.getLeft=function(){var a=this.getY()+this.group.getBBox().height/2,b=this.getX();return{x:b,y:a}},g.prototype.getRight=function(){var a=this.getY()+this.group.getBBox().height/2,b=this.getX()+this.group.getBBox().width;return{x:b,y:a}},g.prototype.render=function(){if(this.next){var a=this.getAttr("line-length");if("right"===this.next_direction){var b=this.getRight();this.next.getLeft();if(!this.next.isPositioned){this.next.setY(b.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+a);var c=this;!function e(){for(var b,d=!1,f=0,g=c.chart.symbols.length;g>f;f++){b=c.chart.symbols[f];var h=Math.abs(b.getCenter().x-c.next.getCenter().x);if(b.getCenter().y>c.next.getCenter().y&&h<=c.next.width/2){d=!0;break}}d&&(c.next.setX(b.getX()+b.width+a),e())}(),this.next.isPositioned=!0,this.next.render()}}else{var d=this.getBottom();this.next.getTop();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+a),this.next.setX(d.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},g.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,"",this.next_direction):this.drawLineTo(this.next))},g.prototype.drawLineTo=function(a,b,c){this.connectedTo.indexOf(a)<0&&this.connectedTo.push(a);var f,g=this.getCenter().x,h=this.getCenter().y,i=(this.getTop(),this.getRight()),j=this.getBottom(),k=this.getLeft(),l=a.getCenter().x,m=a.getCenter().y,n=a.getTop(),o=a.getRight(),p=(a.getBottom(),a.getLeft()),q=g===l,r=h===m,s=m>h,t=h>m,u=g>l,v=l>g,w=0,x=this.getAttr("line-length"),y=this.getAttr("line-width");if(c&&"bottom"!==c||!q||!s)if(c&&"right"!==c||!r||!v)if(c&&"left"!==c||!r||!u)if(c&&"right"!==c||!q||!t)if(c&&"right"!==c||!q||!s)if(c&&"bottom"!==c||!u)if(c&&"bottom"!==c||!v)if(c&&"right"===c&&u)f=d(this.chart,i,[{x:i.x+x/2,y:i.y},{x:i.x+x/2,y:n.y-x/2},{x:n.x,y:n.y-x/2},{x:n.x,y:n.y}],b),this.rightStart=!0,a.topEnd=!0,w=i.x+x/2;else if(c&&"right"===c&&v)f=d(this.chart,i,[{x:n.x,y:i.y},{x:n.x,y:n.y}],b),this.rightStart=!0,a.topEnd=!0,w=i.x+x/2;else if(c&&"bottom"===c&&q&&t)f=d(this.chart,j,[{x:j.x,y:j.y+x/2},{x:i.x+x/2,y:j.y+x/2},{x:i.x+x/2,y:n.y-x/2},{x:n.x,y:n.y-x/2},{x:n.x,y:n.y}],b),this.bottomStart=!0,a.topEnd=!0,w=j.x+x/2;else if("left"===c&&q&&t){var z=k.x-x/2;p.xA;A++)for(var C,D=this.chart.lines[A],E=D.attr("path"),F=f.attr("path"),G=0,H=E.length-1;H>G;G++){var I=[];I.push(["M",E[G][1],E[G][2]]),I.push(["L",E[G+1][1],E[G+1][2]]);for(var J=I[0][1],K=I[0][2],L=I[1][1],M=I[1][2],N=0,O=F.length-1;O>N;N++){var P=[];P.push(["M",F[N][1],F[N][2]]),P.push(["L",F[N+1][1],F[N+1][2]]);var Q=P[0][1],R=P[0][2],S=P[1][1],T=P[1][2],U=e(J,K,L,M,Q,R,S,T);if(U.onLine1&&U.onLine2){var V;R===T?Q>S?(V=["L",U.x+2*y,R],F.splice(N+1,0,V),V=["C",U.x+2*y,R,U.x,R-4*y,U.x-2*y,R],F.splice(N+2,0,V),f.attr("path",F)):(V=["L",U.x-2*y,R],F.splice(N+1,0,V),V=["C",U.x-2*y,R,U.x,R-4*y,U.x+2*y,R],F.splice(N+2,0,V),f.attr("path",F)):R>T?(V=["L",Q,U.y+2*y],F.splice(N+1,0,V),V=["C",Q,U.y+2*y,Q+4*y,U.y,Q,U.y-2*y],F.splice(N+2,0,V),f.attr("path",F)):(V=["L",Q,U.y-2*y],F.splice(N+1,0,V),V=["C",Q,U.y-2*y,Q+4*y,U.y,Q,U.y+2*y],F.splice(N+2,0,V),f.attr("path",F)),N+=2,C+=2}}}this.chart.lines.push(f)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&w>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=w)},q.inherits(h,g),q.inherits(i,g),q.inherits(j,g),q.inherits(k,g),q.inherits(l,g),l.prototype.getLeft=function(){var a=this.getY()+this.group.getBBox().height/2,b=this.getX()+this.textMargin;return{x:b,y:a}},l.prototype.getRight=function(){var a=this.getY()+this.group.getBBox().height/2,b=this.getX()+this.group.getBBox().width-this.textMargin;return{x:b,y:a}},q.inherits(m,g),m.prototype.render=function(){this.yes_direction&&(this[this.yes_direction+"_symbol"]=this.yes_symbol),this.no_direction&&(this[this.no_direction+"_symbol"]=this.no_symbol);var a=this.getAttr("line-length");if(this.bottom_symbol){var b=this.getBottom();this.bottom_symbol.getTop();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+a),this.bottom_symbol.setX(b.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.right_symbol){var c=this.getRight();this.right_symbol.getLeft();if(!this.right_symbol.isPositioned){this.right_symbol.setY(c.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+a);var d=this;!function e(){for(var b,c=!1,f=0,g=d.chart.symbols.length;g>f;f++){b=d.chart.symbols[f];var h=Math.abs(b.getCenter().x-d.right_symbol.getCenter().x);if(b.getCenter().y>d.right_symbol.getCenter().y&&h<=d.right_symbol.width/2){c=!0;break}}c&&(d.right_symbol.setX(b.getX()+b.width+a),e())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},m.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},o.parse=n,o}); -//# sourceMappingURL=flowchart.amd.min.map \ No newline at end of file diff --git a/release/flowchart.amd.min.map b/release/flowchart.amd.min.map deleted file mode 100644 index fbea064f..00000000 --- a/release/flowchart.amd.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"flowchart.amd.min.js","sources":["../bin/flowchart.amd-latest.js"],"names":["root","factory","exports","module","define","amd","this","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","drawPath","chart","location","points","i","len","path","length","pathValues","x","y","push","symbol","paper","attr","font","fontF","fontW","font-family","font-weight","drawLine","from","to","text","toString","call","line","stroke","stroke-width","arrow-end","centerText","textPath","isHorizontal","firstTo","getBBox","width","height","text-anchor","font-size","fill","checkLineIntersection","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","a","b","numerator1","numerator2","result","onLine1","onLine2","FlowChart","container","Raphael","f","defaults","o","symbols","lines","start","Symbol","group","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","key","node","id","setAttribute","getAttr","link","target","maxWidth","words","split","tempText","ii","word","substring","tmpMargin","insertBefore","initialize","Start","rect","End","Operation","Subroutine","innerWrap","InputOutput","textMargin","startX","startY","Condition","yes_direction","no_direction","yes","no","Math","max","parse","input","getSymbol","s","startIndex","indexOf","endIndex","getNextPath","flowSymb","trim","drawSVG","getDisplaySymbol","dispSymbols","diagram","Error","self","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","then","render","prevBreak","i0","i0len","line0","replace","substr","l","currentLine","splice","sub","parts","shift","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","abs","k","lastIndexOf","min","String","flowchart","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","scale","end","condition","inputoutput","operation","subroutine","inherits","handle","flowChart","nextSymbol","yes_symbol","no_symbol","maxHeight","maxX","maxY","shiftX","shiftY","renderLines","maxXFromLine","getX","getY","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","attName","opt1","opt3","opt2","transform","getCenter","setX","setY","getTop","getBottom","getLeft","getRight","lineLength","rightPoint","isPositioned","symb","hasSymbolUnder","diff","bottomPoint","drawLineTo","origin","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","llen","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","newSegment","bottom_symbol","right_symbol"],"mappings":";;;;;CAIC,SAAUA,EAAMC,GACQ,gBAAZC,SAETC,OAAOD,QAAUD,IAEU,kBAAXG,SAAyBA,OAAOC,KAEhDD,UAAWH,IAGbK,KAAM,WA+GN,QAASC,GAAUC,EAASC,GAC1B,IAAKD,GAA8B,kBAAZA,GACrB,MAAOC,EAGT,IAAIC,KACJ,KAAK,GAAIC,KAAYF,GACnBC,EAAOC,GAAYF,EAAeE,EAGpC,KAAKA,IAAYH,GACXA,EAAQG,KACsB,gBAArBD,GAAOC,GAChBD,EAAOC,GAAYJ,EAAUG,EAAOC,GAAWH,EAAQG,IAEvDD,EAAOC,GAAYH,EAAQG,GAIjC,OAAOD,GAGT,QAASE,GAAUC,EAAMC,GACvB,GAA8B,kBAAnBC,QAAa,OAEtBF,EAAKG,OAASF,EACdD,EAAKI,UAAYF,OAAOG,OAAOJ,EAAUG,WACvCE,aACEC,MAAOP,EACPQ,YAAY,EACZC,UAAU,EACVC,cAAc,SAGb,CAELV,EAAKG,OAASF,CACd,IAAIU,GAAW,YACfA,GAASP,UAAYH,EAAUG,UAC/BJ,EAAKI,UAAY,GAAIO,GACrBX,EAAKI,UAAUE,YAAcN,GAUjC,QAASY,GAASC,EAAOC,EAAUC,GACjC,GAAIC,GAAGC,EACHC,EAAO,UACX,KAAKF,EAAI,EAAGC,EAAM,EAAIF,EAAOI,OAAS,EAAOF,EAAJD,EAASA,GAAG,EACnDE,GAAQ,MAAQF,EAAI,OAASA,EAAI,GAAK,GAExC,IAAII,IAAcN,EAASO,EAAGP,EAASQ,EACvC,KAAKN,EAAI,EAAGC,EAAMF,EAAOI,OAAYF,EAAJD,EAASA,IACxCI,EAAWG,KAAKR,EAAOC,GAAGK,GAC1BD,EAAWG,KAAKR,EAAOC,GAAGM,EAE5B,IAAIE,GAASX,EAAMY,MAAMP,KAAKA,EAAME,EACpCI,GAAOE,KAAK,SAAUb,EAAMlB,QAAQ,kBACpC6B,EAAOE,KAAK,eAAgBb,EAAMlB,QAAQ,cAE1C,IAAIgC,GAAOd,EAAMlB,QAAc,KAC3BiC,EAAQf,EAAMlB,QAAQ,eACtBkC,EAAQhB,EAAMlB,QAAQ,cAM1B,OAJIgC,IAAMH,EAAOE,MAAOC,KAAQA,IAC5BC,GAAOJ,EAAOE,MAAOI,cAAeF,IACpCC,GAAOL,EAAOE,MAAOK,cAAeF,IAEjCL,EAGT,QAASQ,GAASnB,EAAOoB,EAAMC,EAAIC,GACjC,GAAInB,GAAGC,CAEoC,oBAAvCf,OAAOE,UAAUgC,SAASC,KAAKH,KACjCA,GAAMA,GAGR,IAAIhB,GAAO,UACX,KAAKF,EAAI,EAAGC,EAAM,EAAIiB,EAAGf,OAAS,EAAOF,EAAJD,EAASA,GAAG,EAC/CE,GAAQ,MAAQF,EAAI,OAASA,EAAI,GAAK,GAExC,IAAII,IAAca,EAAKZ,EAAGY,EAAKX,EAC/B,KAAKN,EAAI,EAAGC,EAAMiB,EAAGf,OAAYF,EAAJD,EAASA,IACpCI,EAAWG,KAAKW,EAAGlB,GAAGK,GACtBD,EAAWG,KAAKW,EAAGlB,GAAGM,EAGxB,IAAIgB,GAAOzB,EAAMY,MAAMP,KAAKA,EAAME,EAClCkB,GAAKZ,MACHa,OAAQ1B,EAAMlB,QAAQ,cACtB6C,eAAgB3B,EAAMlB,QAAQ,cAC9B8C,YAAa5B,EAAMlB,QAAQ,cAG7B,IAAIgC,GAAOd,EAAMlB,QAAc,KAC3BiC,EAAQf,EAAMlB,QAAQ,eACtBkC,EAAQhB,EAAMlB,QAAQ,cAM1B,IAJIgC,GAAMW,EAAKZ,MAAOC,KAAQA,IAC1BC,GAAOU,EAAKZ,MAAOI,cAAeF,IAClCC,GAAOS,EAAKZ,MAAOK,cAAeF,IAElCM,EAAM,CAER,GAAIO,IAAa,EAEbC,EAAW9B,EAAMY,MAAMU,KAAK,EAAG,EAAGA,GAElCS,GAAe,EACfC,EAAUX,EAAG,EAEbD,GAAKX,IAAMuB,EAAQvB,IACrBsB,GAAe,EAGjB,IAAIvB,GAAI,EACJC,EAAI,CAEJoB,IAEArB,EADEY,EAAKZ,EAAIwB,EAAQxB,EACfY,EAAKZ,GAAKY,EAAKZ,EAAIwB,EAAQxB,GAAG,EAE9BwB,EAAQxB,GAAKwB,EAAQxB,EAAIY,EAAKZ,GAAG,EAIrCC,EADEW,EAAKX,EAAIuB,EAAQvB,EACfW,EAAKX,GAAKW,EAAKX,EAAIuB,EAAQvB,GAAG,EAE9BuB,EAAQvB,GAAKuB,EAAQvB,EAAIW,EAAKX,GAAG,EAGnCsB,GACFvB,GAAKsB,EAASG,UAAUC,MAAM,EAC9BzB,GAAKT,EAAMlB,QAAQ,iBAEnB0B,GAAKR,EAAMlB,QAAQ,eACnB2B,GAAKqB,EAASG,UAAUE,OAAO,KAGjC3B,EAAIY,EAAKZ,EACTC,EAAIW,EAAKX,EAELsB,GACFvB,GAAKR,EAAMlB,QAAQ,eAAe,EAClC2B,GAAKT,EAAMlB,QAAQ,iBAEnB0B,GAAKR,EAAMlB,QAAQ,eAAe,EAClC2B,GAAKT,EAAMlB,QAAQ,iBAIvBgD,EAASjB,MACPuB,cAAe,QACfC,YAAarC,EAAMlB,QAAQ,aAC3BwD,KAAQtC,EAAMlB,QAAQ,cACtB0B,EAAGA,EACHC,EAAGA,IAGDK,GAAMgB,EAASjB,MAAOC,KAAQA,IAC9BC,GAAOe,EAASjB,MAAOI,cAAeF,IACtCC,GAAOc,EAASjB,MAAOK,cAAeF,IAG5C,MAAOS,GAGT,QAASc,GAAsBC,EAAaC,EAAaC,EAAWC,EAAWC,EAAaC,EAAaC,EAAWC,GAElH,GAAIC,GAAaC,EAAGC,EAAGC,EAAYC,EAAYC,GAC7C7C,EAAG,KACHC,EAAG,KACH6C,SAAS,EACTC,SAAS,EAGX,OADAP,IAAgBD,EAAYF,IAAgBH,EAAYF,IAAkBM,EAAYF,IAAgBD,EAAYF,GAC9F,IAAhBO,EACKK,GAETJ,EAAIR,EAAcI,EAClBK,EAAIV,EAAcI,EAClBO,GAAeL,EAAYF,GAAeK,GAAOF,EAAYF,GAAeK,EAC5EE,GAAeV,EAAYF,GAAeS,GAAON,EAAYF,GAAeS,EAC5ED,EAAIE,EAAaH,EACjBE,EAAIE,EAAaJ,EAGjBK,EAAO7C,EAAIgC,EAAeS,GAAKP,EAAYF,GAC3Ca,EAAO5C,EAAIgC,EAAeQ,GAAKN,EAAYF,GAOvCQ,EAAI,GAAS,EAAJA,IACXI,EAAOC,SAAU,GAGfJ,EAAI,GAAS,EAAJA,IACXG,EAAOE,SAAU,GAGZF,GAET,QAASG,GAAUC,EAAW3E,GAC5BA,EAAUA,MAEVF,KAAKgC,MAAQ,GAAI8C,SAAQD,GAEzB7E,KAAKE,QAAU6E,EAAEC,SAAS9E,EAAS+E,GAEnCjF,KAAKkF,WACLlF,KAAKmF,SACLnF,KAAKoF,MAAQ,KAuGf,QAASC,GAAOjE,EAAOlB,EAAS6B,GAC9B/B,KAAKoB,MAAQA,EACbpB,KAAKsF,MAAQtF,KAAKoB,MAAMY,MAAMuD,MAC9BvF,KAAK+B,OAASA,EACd/B,KAAKwF,eACLxF,KAAKyF,WAAavF,EAAQuF,WAC1BzF,KAAK0F,UAAaxF,EAAQwF,WAAa,SAEvC1F,KAAK2F,eAAiBzF,EAAQ0F,MAAQ1F,EAAwB,eAAIA,EAAwB,eAAI2F,OAE9F7F,KAAK0C,KAAO1C,KAAKoB,MAAMY,MAAMU,KAAK,EAAG,EAAGxC,EAAQwC,MAE5CxC,EAAQ4F,MAAO9F,KAAK0C,KAAKqD,KAAKC,GAAK9F,EAAQ4F,IAAM,KACrD9F,KAAK0C,KAAKqD,KAAKE,aAAa,QAASjG,KAAKkG,QAAQ,SAAW,KAE7DlG,KAAK0C,KAAKT,MACRuB,cAAe,QACf5B,EAAe5B,KAAKkG,QAAQ,eAC5BxC,KAAe1D,KAAKkG,QAAQ,cAC5BzC,YAAezD,KAAKkG,QAAQ,cAG9B,IAAIhE,GAAQlC,KAAKkG,QAAQ,QACrB/D,EAAQnC,KAAKkG,QAAQ,eACrB9D,EAAQpC,KAAKkG,QAAQ,cAErBhE,IAAMlC,KAAK0C,KAAKT,MAAOC,KAAQA,IAC/BC,GAAOnC,KAAK0C,KAAKT,MAAOI,cAAeF,IACvCC,GAAOpC,KAAK0C,KAAKT,MAAOK,cAAeF,IAEvClC,EAAQiG,MAAQnG,KAAK0C,KAAKT,KAAK,OAAQ/B,EAAQiG,MAC/CjG,EAAQkG,QAAUpG,KAAK0C,KAAKT,KAAK,SAAU/B,EAAQkG,OAEvD,IAAIC,GAAWrG,KAAKkG,QAAQ,WAC5B,IAAIG,EAAU,CAIZ,IAAK,GAFDC,GAAQpG,EAAQwC,KAAK6D,MAAM,KAC3BC,EAAW,GACNjF,EAAE,EAAGkF,EAAGH,EAAM5E,OAAU+E,EAAFlF,EAAMA,IAAK,CACxC,GAAImF,GAAOJ,EAAM/E,EACjBvB,MAAK0C,KAAKT,KAAK,OAAQuE,EAAW,IAAME,GAEtCF,GADExG,KAAK0C,KAAKW,UAAUC,MAAQ+C,EAClB,KAAOK,EAEP,IAAMA,EAGtB1G,KAAK0C,KAAKT,KAAK,OAAQuE,EAASG,UAAU,IAK5C,GAFA3G,KAAKsF,MAAMxD,KAAK9B,KAAK0C,MAEjBX,EAAQ,CACV,GAAI6E,GAAY5G,KAAKkG,QAAQ,cAE7BnE,GAAOE,MACLyB,KAAS1D,KAAKkG,QAAQ,QACtBpD,OAAW9C,KAAKkG,QAAQ,iBACxBnD,eAAiB/C,KAAKkG,QAAQ,cAC9B5C,MAAUtD,KAAK0C,KAAKW,UAAUC,MAAQ,EAAIsD,EAC1CrD,OAAWvD,KAAK0C,KAAKW,UAAUE,OAAS,EAAIqD,IAG9C7E,EAAOgE,KAAKE,aAAa,QAASjG,KAAKkG,QAAQ,UAE3ChG,EAAQiG,MAAQpE,EAAOE,KAAK,OAAQ/B,EAAQiG,MAC5CjG,EAAQkG,QAAUrE,EAAOE,KAAK,SAAU/B,EAAQkG,QAChDlG,EAAQ4F,MAAO/D,EAAOgE,KAAKC,GAAK9F,EAAQ4F,KAE5C9F,KAAKsF,MAAMxD,KAAKC,GAChBA,EAAO8E,aAAa7G,KAAK0C,MAEzB1C,KAAK0C,KAAKT,MACRJ,EAAKE,EAAOsB,UAAUE,OAAO,IAG/BvD,KAAK8G,cAsXT,QAASC,GAAM3F,EAAOlB,GACpB,GAAI6B,GAASX,EAAMY,MAAMgF,KAAK,EAAG,EAAG,EAAG,EAAG,GAC1C9G,GAAUA,MACVA,EAAQwC,KAAOxC,EAAQwC,MAAQ,QAC/B2C,EAAOzC,KAAK5C,KAAMoB,EAAOlB,EAAS6B,GA2BpC,QAASkF,GAAI7F,EAAOlB,GAClB,GAAI6B,GAASX,EAAMY,MAAMgF,KAAK,EAAG,EAAG,EAAG,EAAG,GAC1C9G,GAAUA,MACVA,EAAQwC,KAAOxC,EAAQwC,MAAQ,MAC/B2C,EAAOzC,KAAK5C,KAAMoB,EAAOlB,EAAS6B,GAGpC,QAASmF,GAAU9F,EAAOlB,GACxB,GAAI6B,GAASX,EAAMY,MAAMgF,KAAK,EAAG,EAAG,EAAG,EACvC9G,GAAUA,MACVmF,EAAOzC,KAAK5C,KAAMoB,EAAOlB,EAAS6B,GAGpC,QAASoF,GAAW/F,EAAOlB,GACzB,GAAI6B,GAASX,EAAMY,MAAMgF,KAAK,EAAG,EAAG,EAAG,EACvC9G,GAAUA,MACVmF,EAAOzC,KAAK5C,KAAMoB,EAAOlB,EAAS6B,GAElCA,EAAOE,MACLqB,MAAOtD,KAAK0C,KAAKW,UAAUC,MAAQ,EAAItD,KAAKkG,QAAQ,iBAGtDlG,KAAK0C,KAAKT,MACRL,EAAK,EAAI5B,KAAKkG,QAAQ,gBAGxB,IAAIkB,GAAYhG,EAAMY,MAAMgF,KAAK,EAAG,EAAG,EAAG,EAC1CI,GAAUnF,MACRL,EAAG5B,KAAKkG,QAAQ,eAChBpD,OAAQ9C,KAAKkG,QAAQ,iBACrBnD,eAAgB/C,KAAKkG,QAAQ,cAC7B5C,MAAOtD,KAAK0C,KAAKW,UAAUC,MAAQ,EAAItD,KAAKkG,QAAQ,eACpD3C,OAAQvD,KAAK0C,KAAKW,UAAUE,OAAS,EAAIvD,KAAKkG,QAAQ,eACtDxC,KAAM1D,KAAKkG,QAAQ,UAEjBhG,EAAQ4F,MAAOsB,EAAUrB,KAAKC,GAAK9F,EAAQ4F,IAAM,IAErD,IAAI5D,GAAOlC,KAAKkG,QAAQ,QACpB/D,EAAQnC,KAAKkG,QAAQ,eACrB9D,EAAQpC,KAAKkG,QAAQ,cAErBhE,IAAMkF,EAAUnF,MAAOC,KAAQA,IAC/BC,GAAOiF,EAAUnF,MAAOI,cAAeF,IACvCC,GAAOgF,EAAUnF,MAAOK,cAAeF,IAEvClC,EAAQiG,MAAQiB,EAAUnF,KAAK,OAAQ/B,EAAQiG,MAC/CjG,EAAQkG,QAAUgB,EAAUnF,KAAK,SAAU/B,EAAQkG,QACvDpG,KAAKsF,MAAMxD,KAAKsF,GAChBA,EAAUP,aAAa7G,KAAK0C,MAE5B1C,KAAK8G,aAGP,QAASO,GAAYjG,EAAOlB,GAC1BA,EAAUA,MACVmF,EAAOzC,KAAK5C,KAAMoB,EAAOlB,GACzBF,KAAKsH,WAAatH,KAAKkG,QAAQ,eAE/BlG,KAAK0C,KAAKT,MACRL,EAAqB,EAAlB5B,KAAKsH,YAGV,IAAIhE,GAAQtD,KAAK0C,KAAKW,UAAUC,MAAQ,EAAItD,KAAKsH,WAC7C/D,EAASvD,KAAK0C,KAAKW,UAAUE,OAAS,EAAIvD,KAAKsH,WAC/CC,EAASvH,KAAKsH,WACdE,EAASjE,EAAO,EAEhB6B,GAASxD,EAAG2F,EAAQ1F,EAAG2F,GACvBlG,IACDM,EAAG2F,EAASvH,KAAKsH,WAAYzF,EAAG0B,IAChC3B,EAAG2F,EAASvH,KAAKsH,WAAahE,EAAOzB,EAAG0B,IACxC3B,EAAG2F,EAASvH,KAAKsH,WAAahE,EAAQ,EAAItD,KAAKsH,WAAYzF,EAAG,IAC9DD,EAAG2F,EAASvH,KAAKsH,WAAa,EAAItH,KAAKsH,WAAYzF,EAAG,IACtDD,EAAG2F,EAAQ1F,EAAG2F,IAGbzF,EAASZ,EAASC,EAAOgE,EAAO9D,EAEpCS,GAAOE,MACLa,OAAQ9C,KAAKkG,QAAQ,iBACrBnD,eAAgB/C,KAAKkG,QAAQ,cAC7BxC,KAAM1D,KAAKkG,QAAQ,UAEjBhG,EAAQiG,MAAQpE,EAAOE,KAAK,OAAQ/B,EAAQiG,MAC5CjG,EAAQkG,QAAUrE,EAAOE,KAAK,SAAU/B,EAAQkG,QAChDlG,EAAQ4F,MAAO/D,EAAOgE,KAAKC,GAAK9F,EAAQ4F,KAC5C/D,EAAOgE,KAAKE,aAAa,QAASjG,KAAKkG,QAAQ,UAE/ClG,KAAK0C,KAAKT,MACRJ,EAAGE,EAAOsB,UAAUE,OAAO,IAG7BvD,KAAKsF,MAAMxD,KAAKC,GAChBA,EAAO8E,aAAa7G,KAAK0C,MAEzB1C,KAAK8G,aAeP,QAASW,GAAUrG,EAAOlB,GACxBA,EAAUA,MACVmF,EAAOzC,KAAK5C,KAAMoB,EAAOlB,GACzBF,KAAKsH,WAAatH,KAAKkG,QAAQ,eAC/BlG,KAAK0H,cAAgB,SACrB1H,KAAK2H,aAAe,QAChBzH,EAAQ0H,KAAO1H,EAAuB,eAAKA,EAAQ2H,KAAO3H,EAAsB,aACjD,UAA7BA,EAAuB,eACzBF,KAAK2H,aAAe,SACpB3H,KAAK0H,cAAgB,UAErB1H,KAAK2H,aAAe,QACpB3H,KAAK0H,cAAgB,UAEdxH,EAAQ0H,MAAQ1H,EAAuB,eAAKA,EAAQ2H,IAAM3H,EAAsB,aACzD,UAA5BA,EAAsB,cACxBF,KAAK0H,cAAgB,SACrB1H,KAAK2H,aAAe,UAEpB3H,KAAK0H,cAAgB,QACrB1H,KAAK2H,aAAe,WAGtB3H,KAAK0H,cAAgB,SACrB1H,KAAK2H,aAAe,SAGtB3H,KAAK0H,cAAgB1H,KAAK0H,eAAiB,SAC3C1H,KAAK2H,aAAe3H,KAAK2H,cAAgB,QAEzC3H,KAAK0C,KAAKT,MACRL,EAAqB,EAAlB5B,KAAKsH,YAGV,IAAIhE,GAAQtD,KAAK0C,KAAKW,UAAUC,MAAQ,EAAItD,KAAKsH,UACjDhE,IAASA,EAAM,CACf,IAAIC,GAASvD,KAAK0C,KAAKW,UAAUE,OAAS,EAAIvD,KAAKsH,UACnD/D,IAAUA,EAAO,EACjBA,EAASuE,KAAKC,IAAY,GAARzE,EAAaC,EAC/B,IAAIgE,GAASjE,EAAM,EACfkE,EAASjE,EAAO,CAEpBvD,MAAK0C,KAAKT,MACRL,EAAG2F,EAASvH,KAAKsH,WAAW,GAG9B,IAAIlC,IAASxD,EAAG2F,EAAQ1F,EAAG2F,GACvBlG,IACDM,EAAG2F,EAASjE,EAAM,EAAGzB,EAAG2F,EAASjE,EAAO,IACxC3B,EAAG2F,EAASjE,EAAM,EAAIA,EAAM,EAAGzB,EAAG2F,EAASjE,EAAO,EAAIA,EAAO,IAC7D3B,EAAG2F,EAASjE,EAAM,EAAIA,EAAOzB,EAAG2F,EAASjE,EAAO,IAChD3B,EAAG2F,EAASjE,EAAM,EAAIA,EAAM,EAAGzB,EAAG2F,EAASjE,EAAO,EAAIA,EAAO,IAC7D3B,EAAG2F,EAASjE,EAAM,EAAGzB,EAAG2F,EAASjE,EAAO,IAGvCxB,EAASZ,EAASC,EAAOgE,EAAO9D,EAEpCS,GAAOE,MACLa,OAAQ9C,KAAKkG,QAAQ,iBACrBnD,eAAgB/C,KAAKkG,QAAQ,cAC7BxC,KAAM1D,KAAKkG,QAAQ,UAEjBhG,EAAQiG,MAAQpE,EAAOE,KAAK,OAAQ/B,EAAQiG,MAC5CjG,EAAQkG,QAAUrE,EAAOE,KAAK,SAAU/B,EAAQkG,QAChDlG,EAAQ4F,MAAO/D,EAAOgE,KAAKC,GAAK9F,EAAQ4F,KAC5C/D,EAAOgE,KAAKE,aAAa,QAASjG,KAAKkG,QAAQ,UAE/ClG,KAAK0C,KAAKT,MACRJ,EAAGE,EAAOsB,UAAUE,OAAO,IAG7BvD,KAAKsF,MAAMxD,KAAKC,GAChBA,EAAO8E,aAAa7G,KAAK0C,MAEzB1C,KAAK8G,aA0EP,QAASkB,GAAMC,GAsHb,QAASC,GAAUC,GACjB,GAAIC,GAAaD,EAAEE,QAAQ,KAAO,EAC9BC,EAAWH,EAAEE,QAAQ,IACzB,OAAID,IAAc,GAAKE,GAAY,EAC1BlH,EAAM8D,QAAQiD,EAAExB,UAAU,EAAGyB,EAAa,IAE5ChH,EAAM8D,QAAQiD,GAGvB,QAASI,GAAYJ,GACnB,GAAIvC,GAAO,OACPwC,EAAaD,EAAEE,QAAQ,KAAO,EAC9BC,EAAWH,EAAEE,QAAQ,IASzB,OARID,IAAc,GAAKE,GAAY,IACjC1C,EAAO4C,EAAS7B,UAAUyB,EAAYE,GAClC1C,EAAKyC,QAAQ,KAAO,GACT,QAATzC,GAA2B,OAATA,IACpBA,EAAO,SAAWA,IAIjBA,EA1ITqC,EAAQA,GAAS,GACjBA,EAAQA,EAAMQ,MA4Fd,KAAK,GA1FDrH,IACF8D,WACAE,MAAO,KACPsD,QAAS,SAAS7D,EAAW3E,GAW3B,QAASyI,GAAiBR,GACxB,GAAIS,EAAYT,EAAErC,KAChB,MAAO8C,GAAYT,EAAErC,IAGvB,QAAQqC,EAAE1C,YACR,IAAK,QACHmD,EAAYT,EAAErC,KAAO,GAAIiB,GAAM8B,EAASV,EACxC,MACF,KAAK,MACHS,EAAYT,EAAErC,KAAO,GAAImB,GAAI4B,EAASV,EACtC,MACF,KAAK,YACHS,EAAYT,EAAErC,KAAO,GAAIoB,GAAU2B,EAASV,EAC5C,MACF,KAAK,cACHS,EAAYT,EAAErC,KAAO,GAAIuB,GAAYwB,EAASV,EAC9C,MACF,KAAK,aACHS,EAAYT,EAAErC,KAAO,GAAIqB,GAAW0B,EAASV,EAC7C,MACF,KAAK,YACHS,EAAYT,EAAErC,KAAO,GAAI2B,GAAUoB,EAASV,EAC5C,MACF,SACE,MAAO,IAAIW,OAAM,sBAGrB,MAAOF,GAAYT,EAAErC,KAtCvB,GAAIiD,GAAO/I,IAEPA,MAAK6I,SACP7I,KAAK6I,QAAQG,OAGf,IAAIH,GAAU,GAAIjE,GAAUC,EAAW3E,EACvCF,MAAK6I,QAAUA,CACf,IAAID,OAiCJ,QAAUK,GAAed,EAAGe,EAAUC,GACpC,GAAIC,GAAWT,EAAiBR,EAiBhC,OAfIY,GAAK3D,QAAU+C,EACjBU,EAAQQ,UAAUD,GACTF,GAAYC,IAASD,EAASI,SACnCJ,YAAmB,IACjBC,EAAKvB,MAAQO,GACfe,EAAStB,IAAIwB,GAEXD,EAAKtB,KAAOM,GACde,EAASrB,GAAGuB,IAGdF,EAASK,KAAKH,IAIdA,EAASE,OACJF,GAGLA,YAAmB,IACjBjB,EAAEP,KACJqB,EAAed,EAAEP,IAAKwB,EAAUjB,GAE9BA,EAAEN,IACJoB,EAAed,EAAEN,GAAIuB,EAAUjB,IAExBA,EAAEvC,MACXqD,EAAed,EAAEvC,KAAMwD,EAAUjB,GAG5BiB,IACNpJ,KAAKoF,OAERyD,EAAQW,UAEVR,MAAO,WACLhJ,KAAK6I,QAAQG,UAIb7D,KACAsE,EAAY,EACPC,EAAK,EAAGC,EAAQ1B,EAAMvG,OAAaiI,EAALD,EAAYA,IACjD,GAAiB,OAAdzB,EAAMyB,IAAkC,OAAlBzB,EAAMyB,EAAK,GAAa,CAC/C,GAAIE,GAAQ3B,EAAMtB,UAAU8C,EAAWC,EACvCD,GAAYC,EAAK,EACjBvE,EAAMrD,KAAK8H,EAAMC,QAAQ,QAAS,OAInCJ,EAAYxB,EAAMvG,QACnByD,EAAMrD,KAAKmG,EAAM6B,OAAOL,GAG1B,KAAK,GAAIM,GAAI,EAAGvI,EAAM2D,EAAMzD,OAAYF,EAAJuI,GAAU,CAC5C,GAAIC,GAAc7E,EAAM4E,EAEpBC,GAAY3B,QAAQ,MAAQ,GAAK2B,EAAY3B,QAAQ,MAAQ,GAC/DlD,EAAM4E,EAAI,IAAM,KAAOC,EACvB7E,EAAM8E,OAAOF,EAAG,GAChBvI,KAEAuI,IA4BJ,KAAO5E,EAAMzD,OAAS,GAAG,CACvB,GAAImB,GAAOsC,EAAM8E,OAAO,EAAG,GAAG,EAE9B,IAAIpH,EAAKwF,QAAQ,OAAS,EAAG,CAE3B,GAUI6B,GAVAC,EAAQtH,EAAK0D,MAAM,MACnBxE,GACF+D,IAAKqE,EAAM,GACX1E,WAAY0E,EAAM,GAClBzH,KAAM,KACNyD,KAAM,KACNC,OAAQ,KACRV,UAAW,KA0Bb,IArBI3D,EAAO0D,WAAW4C,QAAQ,OAAS,IACrC6B,EAAMnI,EAAO0D,WAAWc,MAAM,MAC9BxE,EAAO0D,WAAayE,EAAIE,QACxBrI,EAAOW,KAAOwH,EAAIG,KAAK,OAGrBtI,EAAOW,MAAQX,EAAOW,KAAK2F,QAAQ,OAAS,GAC9C6B,EAAMnI,EAAOW,KAAK6D,MAAM,MACxBxE,EAAOW,KAAOwH,EAAIE,QAClBrI,EAAOoE,KAAO+D,EAAIG,KAAK,OACdtI,EAAO0D,WAAW4C,QAAQ,OAAS,IAC5C6B,EAAMnI,EAAO0D,WAAWc,MAAM,MAC9BxE,EAAO0D,WAAayE,EAAIE,QACxBrI,EAAOoE,KAAO+D,EAAIG,KAAK,OAGrBtI,EAAO0D,WAAW4C,QAAQ,OAAS,IACrCtG,EAAO0D,WAAa1D,EAAO0D,WAAWc,MAAM,MAAM,IAIhDxE,EAAOoE,KAAM,CACf,GAAIiC,GAAarG,EAAOoE,KAAKkC,QAAQ,KAAO,EACxCC,EAAWvG,EAAOoE,KAAKkC,QAAQ,IAC/BD,IAAc,GAAKE,GAAY,IACjCvG,EAAOqE,OAASrE,EAAOoE,KAAKQ,UAAUyB,EAAYE,GAClDvG,EAAOoE,KAAOpE,EAAOoE,KAAKQ,UAAU,EAAGyB,EAAa,IAMxD,GAAIrG,EAAOW,MACLX,EAAOW,KAAK2F,QAAQ,MAAQ,EAAG,CACjC,GAAIiC,GAAcvI,EAAOW,KAAK6D,MAAM,IACpCxE,GAAO2D,UAAY4E,EAAYC,MAAM9B,OACrC1G,EAAOW,KAAO4H,EAAYD,KAAK,KAKnCjJ,EAAM8D,QAAQnD,EAAO+D,KAAO/D,MAEvB,IAAIc,EAAKwF,QAAQ,OAAS,EAG/B,IAAK,GADDmC,GAAc3H,EAAK0D,MAAM,MACpBhF,EAAI,EAAGkJ,EAAOD,EAAY9I,OAAY+I,EAAJlJ,EAAUA,IAAK,CACxD,GAAIiH,GAAWgC,EAAYjJ,GAEvBmJ,EAAWxC,EAAUM,GACrB5C,EAAO2C,EAAYC,GAEnBmC,EAAY,IAChB,IAAI/E,EAAKyC,QAAQ,MAAQ,EAAG,CAC1B,GAAIuC,GAAUhF,EAAKW,MAAM,IACzBX,GAAOgF,EAAQ,GACfD,EAAYC,EAAQ,GAAGnC,OAOzB,GAJKrH,EAAMgE,QACThE,EAAMgE,MAAQsF,GAGJD,EAARlJ,EAAI,EAAU,CAChB,GAAIsJ,GAAWL,EAAYjJ,EAAI,EAC/BmJ,GAAS9E,GAAQsC,EAAU2C,GAC3BH,EAAS,aAAe9E,GAAQ+E,EAChCA,EAAY,OAMpB,MAAOvJ,GA13CJ0J,MAAMnK,UAAU0H,UACnByC,MAAMnK,UAAU0H,QAAU,SAAU0C,GAClC,YACA,IAAa,OAAT/K,KACF,KAAM,IAAIgL,UAEZ,IAAIC,GAAIxK,OAAOT,MACXwB,EAAMyJ,EAAEvJ,SAAW,CACvB,IAAY,IAARF,EACF,MAAO,EAET,IAAI0J,GAAI,CASR,IARIC,UAAUzJ,OAAS,IACrBwJ,EAAIE,OAAOD,UAAU,IACjBD,GAAKA,EACPA,EAAI,EACW,IAANA,GAAWA,GAAKG,EAAAA,GAAYH,KAAMG,EAAAA,KAC3CH,GAAKA,EAAI,GAAK,IAAMpD,KAAKwD,MAAMxD,KAAKyD,IAAIL,MAGxCA,GAAK1J,EACP,MAAO,EAGT,KADA,GAAIgK,GAAIN,GAAK,EAAIA,EAAIpD,KAAKC,IAAIvG,EAAMsG,KAAKyD,IAAIL,GAAI,GACtC1J,EAAJgK,EAASA,IACd,GAAIA,IAAKP,IAAKA,EAAEO,KAAOT,EACrB,MAAOS,EAGX,OAAO,KAKNV,MAAMnK,UAAU8K,cACnBX,MAAMnK,UAAU8K,YAAc,SAASV,GACrC,YACA,IAAa,OAAT/K,KACF,KAAM,IAAIgL,UAEZ,IAAIC,GAAIxK,OAAOT,MACXwB,EAAMyJ,EAAEvJ,SAAW,CACvB,IAAY,IAARF,EACF,MAAO,EAET,IAAI0J,GAAI1J,CACJ2J,WAAUzJ,OAAS,IACrBwJ,EAAIE,OAAOD,UAAU,IACjBD,GAAKA,EACPA,EAAI,EACW,IAANA,GAAWA,GAAM,EAAI,GAAMA,KAAO,EAAI,KAC/CA,GAAKA,EAAI,GAAK,IAAMpD,KAAKwD,MAAMxD,KAAKyD,IAAIL,KAI5C,KADA,GAAIM,GAAIN,GAAK,EAAIpD,KAAK4D,IAAIR,EAAG1J,EAAM,GAAKA,EAAMsG,KAAKyD,IAAIL,GAChDM,GAAK,EAAGA,IACb,GAAIA,IAAKP,IAAKA,EAAEO,KAAOT,EACrB,MAAOS,EAGX,OAAO,KAING,OAAOhL,UAAU8H,OACpBkD,OAAOhL,UAAU8H,KAAO,WACtB,MAAOzI,MAAK6J,QAAQ,aAAc,KAItC,IACI+B,MAGA3G,GACFrD,EAAK,EACLC,EAAK,EACLgK,aAAc,EACdC,cAAe,GACfC,cAAe,GACftI,YAAa,GACbuI,aAAc,QAIdC,aAAc,QACdC,gBAAiB,QACjBxI,KAAQ,QACRyI,WAAY,MACZC,UAAW,KACXpJ,YAAa,QACbqJ,QAAS,YACTC,MAAS,EACTpH,SACEE,SACAmH,OACAC,aACAC,eACAC,aACAC,gBAuDA5H,GACFC,SAAU/E,EACV2M,SAAUtM,EAmuCZ,OApjCAsE,GAAUjE,UAAUkM,OAAS,SAAS9K,GAChC/B,KAAKkF,QAAQmD,QAAQtG,IAAW,IAClC/B,KAAKkF,QAAQpD,KAAKC,EAGpB,IAAI+K,GAAY9M,IAyBhB,OAvBI+B,aAAiB,IACnBA,EAAO6F,IAAM,SAASmF,GAKpB,MAJAhL,GAAOiL,WAAaD,EACjBhL,EAAOkL,YACRlL,EAAOuH,QAAS,GAEXwD,EAAUD,OAAOE,IAE1BhL,EAAO8F,GAAK,SAASkF,GAKnB,MAJAhL,GAAOkL,UAAYF,EAChBhL,EAAOiL,aACRjL,EAAOuH,QAAS,GAEXwD,EAAUD,OAAOE,KAG1BhL,EAAOwH,KAAO,SAASwD,GAGrB,MAFAhL,GAAO6D,KAAOmH,EACdhL,EAAOuH,QAAS,EACTwD,EAAUD,OAAOE,IAIrBhL,GAGT6C,EAAUjE,UAAU0I,UAAY,SAAStH,GAEvC,MADA/B,MAAKoF,MAAQrD,EACN/B,KAAK6M,OAAO9K,IAGrB6C,EAAUjE,UAAU6I,OAAS,WAC3B,GAMIzH,GANAsE,EAAW,EACX6G,EAAY,EACZ3L,EAAI,EACJC,EAAM,EACN2L,EAAO,EACPC,EAAO,CAGX,KAAK7L,EAAI,EAAGC,EAAMxB,KAAKkF,QAAQxD,OAAYF,EAAJD,EAASA,IAC9CQ,EAAS/B,KAAKkF,QAAQ3D,GAClBQ,EAAOuB,MAAQ+C,IACjBA,EAAWtE,EAAOuB,OAEhBvB,EAAOwB,OAAS2J,IAClBA,EAAYnL,EAAOwB,OAIvB,KAAKhC,EAAI,EAAGC,EAAMxB,KAAKkF,QAAQxD,OAAYF,EAAJD,EAASA,IAC9CQ,EAAS/B,KAAKkF,QAAQ3D,GACtBQ,EAAOsL,OAAOrN,KAAKE,QAAQ0B,GAAKyE,EAAWtE,EAAOuB,OAAO,EAAItD,KAAKE,QAAQ,eAC1E6B,EAAOuL,OAAOtN,KAAKE,QAAQ2B,GAAKqL,EAAYnL,EAAOwB,QAAQ,EAAIvD,KAAKE,QAAQ,cAS9E,KANAF,KAAKoF,MAAMoE,SAMNjI,EAAI,EAAGC,EAAMxB,KAAKkF,QAAQxD,OAAYF,EAAJD,EAASA,IAC9CQ,EAAS/B,KAAKkF,QAAQ3D,GACtBQ,EAAOwL,aAKT,KAFAJ,EAAOnN,KAAKwN,aAEPjM,EAAI,EAAGC,EAAMxB,KAAKkF,QAAQxD,OAAYF,EAAJD,EAASA,IAAK,CACnDQ,EAAS/B,KAAKkF,QAAQ3D,EACtB,IAAIK,GAAIG,EAAO0L,OAAS1L,EAAOuB,MAC3BzB,EAAIE,EAAO2L,OAAS3L,EAAOwB,MAC3B3B,GAAIuL,IACNA,EAAOvL,GAELC,EAAIuL,IACNA,EAAOvL,GAIX,GAAIyK,GAAQtM,KAAKE,QAAe,MAC5ByN,EAAY3N,KAAKE,QAAQ,aAC7BF,MAAKgC,MAAM4L,QAAST,EAAOb,EAAUqB,EAAYrB,EAASc,EAAOd,EAAUqB,EAAYrB,GACvFtM,KAAKgC,MAAM6L,WAAW,EAAG,EAAGV,EAAOQ,EAAWP,EAAOO,GAAW,IAGlE/I,EAAUjE,UAAUqI,MAAQ,WAC1B,GAAIhJ,KAAKgC,MAAO,CACd,GAAI8L,GAAW9N,KAAKgC,MAAM+L,MAC1BD,GAASE,WAAWC,YAAYH,KAqFpCzI,EAAO1E,UAAUuF,QAAU,SAASgI,GAClC,IAAKlO,KAAKoB,MACR,MAAOyE,OAET,IAEIsI,GAFAC,EAAQpO,KAAKoB,MAAa,QAAIpB,KAAKoB,MAAMlB,QAAQgO,GAAWrI,OAC5DwI,EAAQrO,KAAKoB,MAAMlB,QAAe,QAAIF,KAAKoB,MAAMlB,QAAQgF,QAAQlF,KAAKyF,YAAYyI,GAAWrI,MAKjG,OAHI7F,MAAKoB,MAAMlB,QAAQwF,WAAa1F,KAAKoB,MAAMlB,QAAQwF,UAAU1F,KAAK0F,aACpEyI,EAAOnO,KAAKoB,MAAMlB,QAAQwF,UAAU1F,KAAK0F,WAAWwI,IAE9CC,GAAQE,GAAQD,GAG1B/I,EAAO1E,UAAUmG,WAAa,WAC5B9G,KAAKsF,MAAMgJ,UAAU,IAAMtO,KAAKkG,QAAQ,cAAgB,IAAMlG,KAAKkG,QAAQ,eAE3ElG,KAAKsD,MAAQtD,KAAKsF,MAAMjC,UAAUC,MAClCtD,KAAKuD,OAASvD,KAAKsF,MAAMjC,UAAUE,QAGrC8B,EAAO1E,UAAU4N,UAAY,WAC3B,OAAQ3M,EAAG5B,KAAKyN,OAASzN,KAAKsD,MAAM,EAC5BzB,EAAG7B,KAAK0N,OAAS1N,KAAKuD,OAAO,IAGvC8B,EAAO1E,UAAU8M,KAAO,WACtB,MAAOzN,MAAKsF,MAAMjC,UAAUzB,GAG9ByD,EAAO1E,UAAU+M,KAAO,WACtB,MAAO1N,MAAKsF,MAAMjC,UAAUxB,GAG9BwD,EAAO1E,UAAU0M,OAAS,SAASzL,GACjC5B,KAAKsF,MAAMgJ,UAAU,KAAOtO,KAAKyN,OAAS7L,GAAK,IAAM5B,KAAK0N,SAG5DrI,EAAO1E,UAAU6N,KAAO,SAAS5M,GAC/B5B,KAAKsF,MAAMgJ,UAAU,IAAM1M,EAAI,IAAM5B,KAAK0N,SAG5CrI,EAAO1E,UAAU2M,OAAS,SAASzL,GACjC7B,KAAKsF,MAAMgJ,UAAU,IAAMtO,KAAKyN,OAAS,KAAOzN,KAAK0N,OAAS7L,KAGhEwD,EAAO1E,UAAU8N,KAAO,SAAS5M,GAC/B7B,KAAKsF,MAAMgJ,UAAU,IAAMtO,KAAKyN,OAAS,IAAM5L,IAGjDwD,EAAO1E,UAAU+N,OAAS,WACxB,GAAI7M,GAAI7B,KAAK0N,OACT9L,EAAI5B,KAAKyN,OAASzN,KAAKsD,MAAM,CACjC,QAAQ1B,EAAGA,EAAGC,EAAGA,IAGnBwD,EAAO1E,UAAUgO,UAAY,WAC3B,GAAI9M,GAAI7B,KAAK0N,OAAS1N,KAAKuD,OACvB3B,EAAI5B,KAAKyN,OAASzN,KAAKsD,MAAM,CACjC,QAAQ1B,EAAGA,EAAGC,EAAGA,IAGnBwD,EAAO1E,UAAUiO,QAAU,WACzB,GAAI/M,GAAI7B,KAAK0N,OAAS1N,KAAKsF,MAAMjC,UAAUE,OAAO,EAC9C3B,EAAI5B,KAAKyN,MACb,QAAQ7L,EAAGA,EAAGC,EAAGA,IAGnBwD,EAAO1E,UAAUkO,SAAW,WAC1B,GAAIhN,GAAI7B,KAAK0N,OAAS1N,KAAKsF,MAAMjC,UAAUE,OAAO,EAC9C3B,EAAI5B,KAAKyN,OAASzN,KAAKsF,MAAMjC,UAAUC,KAC3C,QAAQ1B,EAAGA,EAAGC,EAAGA,IAGnBwD,EAAO1E,UAAU6I,OAAS,WACxB,GAAIxJ,KAAK4F,KAAM,CAEb,GAAIkJ,GAAa9O,KAAKkG,QAAQ,cAE9B,IAA4B,UAAxBlG,KAAK2F,eAA4B,CAEnC,GAAIoJ,GAAa/O,KAAK6O,UACN7O,MAAK4F,KAAKgJ,SAE1B,KAAK5O,KAAK4F,KAAKoJ,aAAc,CAE3BhP,KAAK4F,KAAK6I,KAAKM,EAAWlN,EAAI7B,KAAK4F,KAAKrC,OAAO,GAC/CvD,KAAK4F,KAAKyH,OAAOrN,KAAKsF,MAAMjC,UAAUzB,EAAI5B,KAAKsD,MAAQwL,EAEvD,IAAI/F,GAAO/I,MACX,QAAUoK,KAGR,IAAK,GADD6E,GADAC,GAAiB,EAEZ3N,EAAI,EAAGC,EAAMuH,EAAK3H,MAAM8D,QAAQxD,OAAYF,EAAJD,EAASA,IAAK,CAC7D0N,EAAOlG,EAAK3H,MAAM8D,QAAQ3D,EAE1B,IAAI4N,GAAOrH,KAAKyD,IAAI0D,EAAKV,YAAY3M,EAAImH,EAAKnD,KAAK2I,YAAY3M,EAC/D,IAAIqN,EAAKV,YAAY1M,EAAIkH,EAAKnD,KAAK2I,YAAY1M,GAAKsN,GAAQpG,EAAKnD,KAAKtC,MAAM,EAAG,CAC7E4L,GAAiB,CACjB,QAIAA,IACFnG,EAAKnD,KAAK4I,KAAKS,EAAKxB,OAASwB,EAAK3L,MAAQwL,GAC1C1E,QAIJpK,KAAK4F,KAAKoJ,cAAe,EAEzBhP,KAAK4F,KAAK4D,cAEP,CACL,GAAI4F,GAAcpP,KAAK2O,WACR3O,MAAK4F,KAAK8I,QAEpB1O,MAAK4F,KAAKoJ,eACbhP,KAAK4F,KAAK0H,OAAOtN,KAAK0N,OAAS1N,KAAKuD,OAASuL,GAC7C9O,KAAK4F,KAAK4I,KAAKY,EAAYxN,EAAI5B,KAAK4F,KAAKtC,MAAM,GAC/CtD,KAAK4F,KAAKoJ,cAAe,EAEzBhP,KAAK4F,KAAK4D,aAMlBnE,EAAO1E,UAAU4M,YAAc,WACzBvN,KAAK4F,OACH5F,KAAK2F,eACP3F,KAAKqP,WAAWrP,KAAK4F,KAAM,GAAI5F,KAAK2F,gBAEpC3F,KAAKqP,WAAWrP,KAAK4F,QAK3BP,EAAO1E,UAAU0O,WAAa,SAAStN,EAAQW,EAAM4M,GAC/CtP,KAAKwF,YAAY6C,QAAQtG,GAAU,GACrC/B,KAAKwF,YAAY1D,KAAKC,EAGxB,IAsBIc,GAtBAjB,EAAI5B,KAAKuO,YAAY3M,EACrBC,EAAI7B,KAAKuO,YAAY1M,EAErB0N,GADMvP,KAAK0O,SACH1O,KAAK6O,YACbW,EAASxP,KAAK2O,YACdc,EAAOzP,KAAK4O,UAEZc,EAAU3N,EAAOwM,YAAY3M,EAC7B+N,EAAU5N,EAAOwM,YAAY1M,EAC7B+N,EAAY7N,EAAO2M,SACnBmB,EAAc9N,EAAO8M,WAErBiB,GADe/N,EAAO4M,YACT5M,EAAO6M,WAEpBmB,EAAiBnO,IAAM8N,EACvBM,EAAenO,IAAM8N,EACrBM,EAAcN,EAAJ9N,EACVqO,EAAUrO,EAAI8N,EACdQ,EAASvO,EAAI8N,EACbU,EAAcV,EAAJ9N,EAEVuL,EAAO,EAEP2B,EAAa9O,KAAKkG,QAAQ,eAC1BmK,EAAWrQ,KAAKkG,QAAQ,aAE5B,IAAMoJ,GAAqB,WAAXA,IAAwBS,IAAkBE,EAKnD,GAAMX,GAAqB,UAAXA,IAAuBU,IAAgBI,EAKvD,GAAMd,GAAqB,SAAXA,IAAsBU,IAAgBG,EAKtD,GAAMb,GAAqB,UAAXA,IAAuBS,IAAkBG,EAUzD,GAAMZ,GAAqB,UAAXA,IAAuBS,IAAkBE,EAUzD,GAAMX,GAAqB,WAAXA,IAAwBa,EAmBxC,GAAMb,GAAqB,WAAXA,IAAwBc,EAWxC,GAAKd,GAAqB,UAAXA,GAAuBa,EAC3CtN,EAAON,EAASvC,KAAKoB,MAAOmO,IACzB3N,EAAG2N,EAAM3N,EAAIkN,EAAW,EAAGjN,EAAG0N,EAAM1N,IACpCD,EAAG2N,EAAM3N,EAAIkN,EAAW,EAAGjN,EAAG+N,EAAU/N,EAAIiN,EAAW,IACvDlN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,EAAIiN,EAAW,IAC5ClN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,IAC7Ba,GACH1C,KAAKsQ,YAAa,EAClBvO,EAAOwO,QAAS,EAChBpD,EAAOoC,EAAM3N,EAAIkN,EAAW,MACvB,IAAKQ,GAAqB,UAAXA,GAAuBc,EAC3CvN,EAAON,EAASvC,KAAKoB,MAAOmO,IACzB3N,EAAGgO,EAAUhO,EAAGC,EAAG0N,EAAM1N,IACzBD,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,IAC7Ba,GACH1C,KAAKsQ,YAAa,EAClBvO,EAAOwO,QAAS,EAChBpD,EAAOoC,EAAM3N,EAAIkN,EAAW,MACvB,IAAKQ,GAAqB,WAAXA,GAAwBS,GAAkBG,EAC9DrN,EAAON,EAASvC,KAAKoB,MAAOoO,IACzB5N,EAAG4N,EAAO5N,EAAGC,EAAG2N,EAAO3N,EAAIiN,EAAW,IACtClN,EAAG2N,EAAM3N,EAAIkN,EAAW,EAAGjN,EAAG2N,EAAO3N,EAAIiN,EAAW,IACpDlN,EAAG2N,EAAM3N,EAAIkN,EAAW,EAAGjN,EAAG+N,EAAU/N,EAAIiN,EAAW,IACvDlN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,EAAIiN,EAAW,IAC5ClN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,IAC7Ba,GACH1C,KAAKwQ,aAAc,EACnBzO,EAAOwO,QAAS,EAChBpD,EAAOqC,EAAO5N,EAAIkN,EAAW,MACxB,IAAgB,SAAXQ,GAAsBS,GAAkBG,EAAS,CAC3D,GAAIO,GAAQhB,EAAK7N,EAAIkN,EAAW,CAC5BgB,GAAWlO,EAAI6N,EAAK7N,IACtB6O,EAAQX,EAAWlO,EAAIkN,EAAW,GAEpCjM,EAAON,EAASvC,KAAKoB,MAAOqO,IACzB7N,EAAG6O,EAAO5O,EAAG4N,EAAK5N,IAClBD,EAAG6O,EAAO5O,EAAG+N,EAAU/N,EAAIiN,EAAW,IACtClN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,EAAIiN,EAAW,IAC5ClN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,IAC7Ba,GACH1C,KAAK0Q,WAAY,EACjB3O,EAAOwO,QAAS,EAChBpD,EAAOsC,EAAK7N,MACS,SAAX0N,IACVzM,EAAON,EAASvC,KAAKoB,MAAOqO,IACzB7N,EAAGgO,EAAUhO,GAAK6N,EAAK7N,EAAIgO,EAAUhO,GAAI,EAAGC,EAAG4N,EAAK5N,IACpDD,EAAGgO,EAAUhO,GAAK6N,EAAK7N,EAAIgO,EAAUhO,GAAI,EAAGC,EAAG+N,EAAU/N,EAAIiN,EAAW,IACxElN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,EAAIiN,EAAW,IAC5ClN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,IAC7Ba,GACH1C,KAAK0Q,WAAY,EACjB3O,EAAOwO,QAAS,EAChBpD,EAAOsC,EAAK7N,OA9DZiB,GAAON,EAASvC,KAAKoB,MAAOoO,IACzB5N,EAAG4N,EAAO5N,EAAGC,EAAG2N,EAAO3N,EAAIiN,EAAW,IACtClN,EAAG4N,EAAO5N,GAAK4N,EAAO5N,EAAIgO,EAAUhO,GAAG,EAAGC,EAAG2N,EAAO3N,EAAIiN,EAAW,IACnElN,EAAG4N,EAAO5N,GAAK4N,EAAO5N,EAAIgO,EAAUhO,GAAG,EAAGC,EAAG+N,EAAU/N,EAAIiN,EAAW,IACtElN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,EAAIiN,EAAW,IAC5ClN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,IAC7Ba,GACH1C,KAAKwQ,aAAc,EACnBzO,EAAOwO,QAAS,EAChBpD,EAAOqC,EAAO5N,GAAK4N,EAAO5N,EAAIgO,EAAUhO,GAAG,MA3BzCiB,GADE7C,KAAK2Q,SAAWT,EACX3N,EAASvC,KAAKoB,MAAOoO,IACzB5N,EAAG4N,EAAO5N,EAAGC,EAAG2N,EAAO3N,EAAIiN,EAAW,IACtClN,EAAG4N,EAAO5N,GAAK4N,EAAO5N,EAAIgO,EAAUhO,GAAG,EAAGC,EAAG2N,EAAO3N,EAAIiN,EAAW,IACnElN,EAAG4N,EAAO5N,GAAK4N,EAAO5N,EAAIgO,EAAUhO,GAAG,EAAGC,EAAG+N,EAAU/N,EAAIiN,EAAW,IACtElN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,EAAIiN,EAAW,IAC5ClN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,IAC7Ba,GAEIH,EAASvC,KAAKoB,MAAOoO,IACzB5N,EAAG4N,EAAO5N,EAAGC,EAAG+N,EAAU/N,EAAIiN,EAAW,IACzClN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,EAAIiN,EAAW,IAC5ClN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,IAC7Ba,GAEL1C,KAAKwQ,aAAc,EACnBzO,EAAOwO,QAAS,EAChBpD,EAAOqC,EAAO5N,GAAK4N,EAAO5N,EAAIgO,EAAUhO,GAAG,MA3B3CiB,GAAON,EAASvC,KAAKoB,MAAOmO,IACzB3N,EAAG2N,EAAM3N,EAAIkN,EAAW,EAAGjN,EAAG0N,EAAM1N,IACpCD,EAAG2N,EAAM3N,EAAIkN,EAAW,EAAGjN,EAAG+N,EAAU/N,EAAIiN,EAAW,IACvDlN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,EAAIiN,EAAW,IAC5ClN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,IAC7Ba,GACH1C,KAAKsQ,YAAa,EAClBvO,EAAOwO,QAAS,EAChBpD,EAAOoC,EAAM3N,EAAIkN,EAAW,MAlB5BjM,GAAON,EAASvC,KAAKoB,MAAOmO,IACzB3N,EAAG2N,EAAM3N,EAAIkN,EAAW,EAAGjN,EAAG0N,EAAM1N,IACpCD,EAAG2N,EAAM3N,EAAIkN,EAAW,EAAGjN,EAAG+N,EAAU/N,EAAIiN,EAAW,IACvDlN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,EAAIiN,EAAW,IAC5ClN,EAAGgO,EAAUhO,EAAGC,EAAG+N,EAAU/N,IAC7Ba,GACH1C,KAAKsQ,YAAa,EAClBvO,EAAOwO,QAAS,EAChBpD,EAAOoC,EAAM3N,EAAIkN,EAAW,MAb5BjM,GAAON,EAASvC,KAAKoB,MAAOqO,EAAMI,EAAanN,GAC/C1C,KAAK0Q,WAAY,EACjB3O,EAAO6O,UAAW,EAClBzD,EAAO0C,EAAYjO,MARnBiB,GAAON,EAASvC,KAAKoB,MAAOmO,EAAOO,EAAYpN,GAC/C1C,KAAKsQ,YAAa,EAClBvO,EAAO4O,SAAU,EACjBxD,EAAO2C,EAAWlO,MARlBiB,GAAON,EAASvC,KAAKoB,MAAOoO,EAAQI,EAAWlN,GAC/C1C,KAAKwQ,aAAc,EACnBzO,EAAOwO,QAAS,EAChBpD,EAAOqC,EAAO5N,CAoHhB,IAAIiB,EAAM,CAER,IAAK,GAAIkH,GAAI,EAAG8G,EAAO7Q,KAAKoB,MAAM+D,MAAMzD,OAAYmP,EAAJ9G,EAAUA,IAUxD,IAAK,GAPDvI,GAFAsP,EAAY9Q,KAAKoB,MAAM+D,MAAM4E,GAM7BgH,EAAQD,EAAU7O,KAAK,QACvB+O,EAAQnO,EAAKZ,KAAK,QAEbgP,EAAK,EAAGC,EAAOH,EAAMrP,OAAS,EAAQwP,EAALD,EAAWA,IAAM,CACzD,GAAIE,KACJA,GAAQrP,MAAM,IAAKiP,EAAME,GAAI,GAAIF,EAAME,GAAI,KAC3CE,EAAQrP,MAAM,IAAKiP,EAAME,EAAK,GAAG,GAAIF,EAAME,EAAK,GAAG,IAOnD,KAAK,GALDG,GAAeD,EAAQ,GAAG,GAC1BE,EAAeF,EAAQ,GAAG,GAC1BG,EAAaH,EAAQ,GAAG,GACxBI,EAAaJ,EAAQ,GAAG,GAEnBK,EAAK,EAAGC,EAAQT,EAAMtP,OAAS,EAAQ+P,EAALD,EAAYA,IAAM,CAC3D,GAAIE,KACJA,GAAY5P,MAAM,IAAKkP,EAAMQ,GAAI,GAAIR,EAAMQ,GAAI,KAC/CE,EAAY5P,MAAM,IAAKkP,EAAMQ,EAAK,GAAG,GAAIR,EAAMQ,EAAK,GAAG,IAEvD,IAAIG,GAAeD,EAAY,GAAG,GAC9BE,EAAeF,EAAY,GAAG,GAC9BG,EAAaH,EAAY,GAAG,GAC5BI,EAAaJ,EAAY,GAAG,GAE5BK,EAAMpO,EAAsByN,EAAcC,EAAcC,EAAYC,EAAYI,EAAcC,EAAcC,EAAYC,EAC5H,IAAIC,EAAIrN,SAAWqN,EAAIpN,QAAS,CAE9B,GAAIqN,EACAJ,KAAiBE,EACfH,EAAeE,GACjBG,GAAc,IAAKD,EAAInQ,EAAe,EAAXyO,EAAeuB,GAC1CZ,EAAM/G,OAAOuH,EAAK,EAAG,EAAGQ,GACxBA,GAAc,IAAKD,EAAInQ,EAAe,EAAXyO,EAAeuB,EAAcG,EAAInQ,EAAGgQ,EAA0B,EAAXvB,EAAc0B,EAAInQ,EAAe,EAAXyO,EAAcuB,GAClHZ,EAAM/G,OAAOuH,EAAK,EAAG,EAAGQ,GACxBnP,EAAKZ,KAAK,OAAQ+O,KAElBgB,GAAc,IAAKD,EAAInQ,EAAe,EAAXyO,EAAeuB,GAC1CZ,EAAM/G,OAAOuH,EAAK,EAAG,EAAGQ,GACxBA,GAAc,IAAKD,EAAInQ,EAAe,EAAXyO,EAAeuB,EAAcG,EAAInQ,EAAGgQ,EAA0B,EAAXvB,EAAc0B,EAAInQ,EAAe,EAAXyO,EAAcuB,GAClHZ,EAAM/G,OAAOuH,EAAK,EAAG,EAAGQ,GACxBnP,EAAKZ,KAAK,OAAQ+O,IAGhBY,EAAeE,GACjBE,GAAc,IAAKL,EAAcI,EAAIlQ,EAAe,EAAXwO,GACzCW,EAAM/G,OAAOuH,EAAK,EAAG,EAAGQ,GACxBA,GAAc,IAAKL,EAAcI,EAAIlQ,EAAe,EAAXwO,EAAcsB,EAA0B,EAAXtB,EAAc0B,EAAIlQ,EAAG8P,EAAcI,EAAIlQ,EAAe,EAAXwO,GACjHW,EAAM/G,OAAOuH,EAAK,EAAG,EAAGQ,GACxBnP,EAAKZ,KAAK,OAAQ+O,KAElBgB,GAAc,IAAKL,EAAcI,EAAIlQ,EAAe,EAAXwO,GACzCW,EAAM/G,OAAOuH,EAAK,EAAG,EAAGQ,GACxBA,GAAc,IAAKL,EAAcI,EAAIlQ,EAAe,EAAXwO,EAAcsB,EAA0B,EAAXtB,EAAc0B,EAAIlQ,EAAG8P,EAAcI,EAAIlQ,EAAe,EAAXwO,GACjHW,EAAM/G,OAAOuH,EAAK,EAAG,EAAGQ,GACxBnP,EAAKZ,KAAK,OAAQ+O,IAItBQ,GAAM,EACNhQ,GAAO,IAMfxB,KAAKoB,MAAM+D,MAAMrD,KAAKe,KAGnB7C,KAAKoB,MAAMoM,cAAiBxN,KAAKoB,MAAMoM,cAAgBL,EAAOnN,KAAKoB,MAAMoM,gBAC5ExN,KAAKoB,MAAMoM,aAAeL,IAS9BpI,EAAE6H,SAAS7F,EAAO1B,GA+BlBN,EAAE6H,SAAS3F,EAAK5B,GAMhBN,EAAE6H,SAAS1F,EAAW7B,GAwCtBN,EAAE6H,SAASzF,EAAY9B,GA6CvBN,EAAE6H,SAASvF,EAAahC,GAExBgC,EAAY1G,UAAUiO,QAAU,WAC9B,GAAI/M,GAAI7B,KAAK0N,OAAS1N,KAAKsF,MAAMjC,UAAUE,OAAO,EAC9C3B,EAAI5B,KAAKyN,OAASzN,KAAKsH,UAC3B,QAAQ1F,EAAGA,EAAGC,EAAGA,IAGnBwF,EAAY1G,UAAUkO,SAAW,WAC/B,GAAIhN,GAAI7B,KAAK0N,OAAS1N,KAAKsF,MAAMjC,UAAUE,OAAO,EAC9C3B,EAAI5B,KAAKyN,OAASzN,KAAKsF,MAAMjC,UAAUC,MAAQtD,KAAKsH,UACxD,QAAQ1F,EAAGA,EAAGC,EAAGA,IA8EnBkD,EAAE6H,SAASnF,EAAWpC,GAEtBoC,EAAU9G,UAAU6I,OAAS,WAEvBxJ,KAAK0H,gBACP1H,KAAKA,KAAK0H,cAAgB,WAAa1H,KAAKgN,YAG1ChN,KAAK2H,eACP3H,KAAKA,KAAK2H,aAAe,WAAa3H,KAAKiN,UAG7C,IAAI6B,GAAa9O,KAAKkG,QAAQ,cAE9B,IAAIlG,KAAKiS,cAAe,CACtB,GAAI7C,GAAcpP,KAAK2O,WACR3O,MAAKiS,cAAcvD,QAE7B1O,MAAKiS,cAAcjD,eACtBhP,KAAKiS,cAAc3E,OAAOtN,KAAK0N,OAAS1N,KAAKuD,OAASuL,GACtD9O,KAAKiS,cAAczD,KAAKY,EAAYxN,EAAI5B,KAAKiS,cAAc3O,MAAM,GACjEtD,KAAKiS,cAAcjD,cAAe,EAElChP,KAAKiS,cAAczI,UAIvB,GAAIxJ,KAAKkS,aAAc,CACrB,GAAInD,GAAa/O,KAAK6O,UACN7O,MAAKkS,aAAatD,SAElC,KAAK5O,KAAKkS,aAAalD,aAAc,CAEnChP,KAAKkS,aAAazD,KAAKM,EAAWlN,EAAI7B,KAAKkS,aAAa3O,OAAO,GAC/DvD,KAAKkS,aAAa7E,OAAOrN,KAAKsF,MAAMjC,UAAUzB,EAAI5B,KAAKsD,MAAQwL,EAE/D,IAAI/F,GAAO/I,MACX,QAAUoK,KAGR,IAAK,GADD6E,GADAC,GAAiB,EAEZ3N,EAAI,EAAGC,EAAMuH,EAAK3H,MAAM8D,QAAQxD,OAAYF,EAAJD,EAASA,IAAK,CAC7D0N,EAAOlG,EAAK3H,MAAM8D,QAAQ3D,EAE1B,IAAI4N,GAAOrH,KAAKyD,IAAI0D,EAAKV,YAAY3M,EAAImH,EAAKmJ,aAAa3D,YAAY3M,EACvE,IAAIqN,EAAKV,YAAY1M,EAAIkH,EAAKmJ,aAAa3D,YAAY1M,GAAKsN,GAAQpG,EAAKmJ,aAAa5O,MAAM,EAAG,CAC7F4L,GAAiB,CACjB,QAIAA,IACFnG,EAAKmJ,aAAa1D,KAAKS,EAAKxB,OAASwB,EAAK3L,MAAQwL,GAClD1E,QAIJpK,KAAKkS,aAAalD,cAAe,EAEjChP,KAAKkS,aAAa1I,YAKxB/B,EAAU9G,UAAU4M,YAAc,WAC5BvN,KAAKgN,YACPhN,KAAKqP,WAAWrP,KAAKgN,WAAYhN,KAAKkG,QAAQ,YAAalG,KAAK0H,eAG9D1H,KAAKiN,WACPjN,KAAKqP,WAAWrP,KAAKiN,UAAWjN,KAAKkG,QAAQ,WAAYlG,KAAK2H,eA8OlEiE,EAAU5D,MAAQA,EAEX4D"} \ No newline at end of file diff --git a/release/flowchart.amd.zip b/release/flowchart.amd.zip deleted file mode 100644 index 505eb4416d983571884a77cf49790e99615a9680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28426 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 ap6j3gR!tEW?mr(u|GRen-LakjGx{I2Imej* diff --git a/release/flowchart.js b/release/flowchart.js index 8e97c90c..8a79161f 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,1423 +1,983 @@ // flowchart, v1.4.2 -// Copyright (c)2015 Adriano Raiano (adrai). +// Copyright (c)yyyy Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js -(function() { - - // add indexOf to non ECMA-262 standard compliant browsers - if (!Array.prototype.indexOf) { - Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { - "use strict"; - if (this === null) { - throw new TypeError(); - } - var t = Object(this); - var len = t.length >>> 0; - if (len === 0) { - return -1; - } - var n = 0; - if (arguments.length > 0) { - n = Number(arguments[1]); - if (n != n) { // shortcut for verifying if it's NaN - n = 0; - } else if (n !== 0 && n != Infinity && n != -Infinity) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - } - if (n >= len) { - return -1; - } - var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); - for (; k < len; k++) { - if (k in t && t[k] === searchElement) { - return k; - } - } - return -1; - }; - } - - // add lastIndexOf to non ECMA-262 standard compliant browsers - if (!Array.prototype.lastIndexOf) { - Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) { - "use strict"; - if (this === null) { - throw new TypeError(); - } - var t = Object(this); - var len = t.length >>> 0; - if (len === 0) { - return -1; - } - var n = len; - if (arguments.length > 1) { - n = Number(arguments[1]); - if (n != n) { - n = 0; - } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - } - var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n); - for (; k >= 0; k--) { - if (k in t && t[k] === searchElement) { - return k; - } - } - return -1; - }; - } - - if (!String.prototype.trim) { - String.prototype.trim = function() { - return this.replace(/^\s+|\s+$/g, ''); - }; - } - - var root = this, - flowchart = {}; - - // Export the flowchart object for **CommonJS**. - // If we're not in CommonJS, add `flowchart` to the - // global object or to jquery. - if (typeof module !== 'undefined' && module.exports) { - module.exports = flowchart; - } else { - root.flowchart = root.flowchart || flowchart; - } - // defaults - var o = { - 'x': 0, - 'y': 0, - 'line-width': 3, - 'line-length': 50, - 'text-margin': 10, - 'font-size': 14, - 'font-color': 'black', - // 'font': 'normal', - // 'font-family': 'calibri', - // 'font-weight': 'normal', - 'line-color': 'black', - 'element-color': 'black', - 'fill': 'white', - 'yes-text': 'yes', - 'no-text': 'no', - 'arrow-end': 'block', - 'class': 'flowchart', - 'scale': 1, - 'symbols': { - 'start': {}, - 'end': {}, - 'condition': {}, - 'inputoutput': {}, - 'operation': {}, - 'subroutine': {} - }//, - // 'flowstate' : { - // 'past' : { 'fill': '#CCCCCC', 'font-size': 12}, - // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'}, - // 'future' : { 'fill': '#FFFF99'}, - // 'invalid': {'fill': '#444444'} - // } - }; - function _defaults(options, defaultOptions) { - if (!options || typeof options === 'function') { - return defaultOptions; - } - - var merged = {}; - for (var attrname in defaultOptions) { - merged[attrname] = defaultOptions[attrname]; - } - - for (attrname in options) { - if (options[attrname]) { - if (typeof merged[attrname] === 'object') { - merged[attrname] = _defaults(merged[attrname], options[attrname]); - } else { - merged[attrname] = options[attrname]; - } - } - } - return merged; - } - - function _inherits(ctor, superCtor) { - if (typeof(Object.create) === 'function') { - // implementation from standard node.js 'util' module - ctor.super_ = superCtor; - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true +!function(root, factory) { + if ("object" == typeof exports && "object" == typeof module) module.exports = factory(require("Raphael")); else if ("function" == typeof define && define.amd) define([ "Raphael" ], factory); else { + var a = factory("object" == typeof exports ? require("Raphael") : root.Raphael); + for (var i in a) ("object" == typeof exports ? exports : root)[i] = a[i]; + } +}(this, function(__WEBPACK_EXTERNAL_MODULE_15__) { + /******/ + return function(modules) { + /******/ + /******/ + // The require function + /******/ + function __webpack_require__(moduleId) { + /******/ + /******/ + // Check if module is in cache + /******/ + if (installedModules[moduleId]) /******/ + return installedModules[moduleId].exports; + /******/ + /******/ + // Create a new module (and put it into the cache) + /******/ + var module = installedModules[moduleId] = { + /******/ + exports: {}, + /******/ + id: moduleId, + /******/ + loaded: !1 + }; + /******/ + /******/ + // Return the exports of the module + /******/ + /******/ + /******/ + // Execute the module function + /******/ + /******/ + /******/ + // Flag the module as loaded + /******/ + return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__), + module.loaded = !0, module.exports; } - }); - } else { - // old school shim for old browsers - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - } - - // move dependent functions to a container so that - // they can be overriden easier in no jquery environment (node.js) - var f = { - defaults: _defaults, - inherits: _inherits - }; - function drawPath(chart, location, points) { - var i, len; - var path = 'M{0},{1}'; - for (i = 2, len = 2 * points.length + 2; i < len; i+=2) { - path += ' L{' + i + '},{' + (i + 1) + '}'; - } - var pathValues = [location.x, location.y]; - for (i = 0, len = points.length; i < len; i++) { - pathValues.push(points[i].x); - pathValues.push(points[i].y); - } - var symbol = chart.paper.path(path, pathValues); - symbol.attr('stroke', chart.options['element-color']); - symbol.attr('stroke-width', chart.options['line-width']); - - var font = chart.options['font']; - var fontF = chart.options['font-family']; - var fontW = chart.options['font-weight']; - - if (font) symbol.attr({ 'font': font }); - if (fontF) symbol.attr({ 'font-family': fontF }); - if (fontW) symbol.attr({ 'font-weight': fontW }); - - return symbol; - } - - function drawLine(chart, from, to, text) { - var i, len; - - if (Object.prototype.toString.call(to) !== '[object Array]') { - to = [to]; - } - - var path = 'M{0},{1}'; - for (i = 2, len = 2 * to.length + 2; i < len; i+=2) { - path += ' L{' + i + '},{' + (i + 1) + '}'; - } - var pathValues = [from.x, from.y]; - for (i = 0, len = to.length; i < len; i++) { - pathValues.push(to[i].x); - pathValues.push(to[i].y); - } - - var line = chart.paper.path(path, pathValues); - line.attr({ - stroke: chart.options['line-color'], - 'stroke-width': chart.options['line-width'], - 'arrow-end': chart.options['arrow-end'] - }); - - var font = chart.options['font']; - var fontF = chart.options['font-family']; - var fontW = chart.options['font-weight']; - - if (font) line.attr({ 'font': font }); - if (fontF) line.attr({ 'font-family': fontF }); - if (fontW) line.attr({ 'font-weight': fontW }); - - if (text) { - - var centerText = false; - - var textPath = chart.paper.text(0, 0, text); - - var isHorizontal = false; - var firstTo = to[0]; - - if (from.y === firstTo.y) { - isHorizontal = true; - } - - var x = 0, - y = 0; - - if (centerText) { - if (from.x > firstTo.x) { - x = from.x - (from.x - firstTo.x)/2; - } else { - x = firstTo.x - (firstTo.x - from.x)/2; - } - - if (from.y > firstTo.y) { - y = from.y - (from.y - firstTo.y)/2; - } else { - y = firstTo.y - (firstTo.y - from.y)/2; - } - - if (isHorizontal) { - x -= textPath.getBBox().width/2; - y -= chart.options['text-margin']; - } else { - x += chart.options['text-margin']; - y -= textPath.getBBox().height/2; - } - } else { - x = from.x; - y = from.y; - - if (isHorizontal) { - x += chart.options['text-margin']/2; - y -= chart.options['text-margin']; - } else { - x += chart.options['text-margin']/2; - y += chart.options['text-margin']; - } - } - - textPath.attr({ - 'text-anchor': 'start', - 'font-size': chart.options['font-size'], - 'fill': chart.options['font-color'], - x: x, - y: y - }); - - if (font) textPath.attr({ 'font': font }); - if (fontF) textPath.attr({ 'font-family': fontF }); - if (fontW) textPath.attr({ 'font-weight': fontW }); - } - - return line; - } - - function checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) { - // 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 - var denominator, a, b, numerator1, numerator2, result = { - x: null, - y: null, - onLine1: false, - onLine2: false - }; - denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY)); - if (denominator === 0) { - return result; - } - a = line1StartY - line2StartY; - b = line1StartX - line2StartX; - numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b); - numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b); - a = numerator1 / denominator; - b = numerator2 / denominator; - - // if we cast these lines infinitely in both directions, they intersect here: - result.x = line1StartX + (a * (line1EndX - line1StartX)); - result.y = line1StartY + (a * (line1EndY - line1StartY)); - /* - // it is worth noting that this should be the same as: - x = line2StartX + (b * (line2EndX - line2StartX)); - y = line2StartX + (b * (line2EndY - line2StartY)); - */ - // if line1 is a segment and line2 is infinite, they intersect if: - if (a > 0 && a < 1) { - result.onLine1 = true; - } - // if line2 is a segment and line1 is infinite, they intersect if: - if (b > 0 && b < 1) { - result.onLine2 = true; - } - // if line1 and line2 are segments, they intersect if both of the above are true - return result; - } - function FlowChart(container, options) { - options = options || {}; - - this.paper = new Raphael(container); - - this.options = f.defaults(options, o); - - this.symbols = []; - this.lines = []; - this.start = null; - } - - FlowChart.prototype.handle = function(symbol) { - if (this.symbols.indexOf(symbol) <= -1) { - this.symbols.push(symbol); - } - - var flowChart = this; - - if (symbol instanceof(Condition)) { - symbol.yes = function(nextSymbol) { - symbol.yes_symbol = nextSymbol; - if(symbol.no_symbol) { - symbol.pathOk = true; - } - return flowChart.handle(nextSymbol); - }; - symbol.no = function(nextSymbol) { - symbol.no_symbol = nextSymbol; - if(symbol.yes_symbol) { - symbol.pathOk = true; + // webpackBootstrap + /******/ + // The module cache + /******/ + var installedModules = {}; + /******/ + /******/ + // Load entry module and return exports + /******/ + /******/ + /******/ + /******/ + // expose the modules object (__webpack_modules__) + /******/ + /******/ + /******/ + // expose the module cache + /******/ + /******/ + /******/ + // __webpack_public_path__ + /******/ + return __webpack_require__.m = modules, __webpack_require__.c = installedModules, + __webpack_require__.p = "", __webpack_require__(0); + }([ /* 0 */ + /*!******************!*\ + !*** ./index.js ***! + \******************/ + /***/ + function(module, exports, __webpack_require__) { + __webpack_require__(/*! ./src/flowchart.shim */ 8); + var parse = __webpack_require__(/*! ./src/flowchart.parse */ 4); + __webpack_require__(/*! ./src/jquery-plugin */ 14); + var FlowChart = { + parse: parse + }; + "undefined" != typeof window && (window.FlowChart = FlowChart), module.exports = FlowChart; + }, /* 1 */ + /*!**********************************!*\ + !*** ./src/flowchart.helpers.js ***! + \**********************************/ + /***/ + function(module, exports) { + function _defaults(options, defaultOptions) { + if (!options || "function" == typeof options) return defaultOptions; + var merged = {}; + for (var attrname in defaultOptions) merged[attrname] = defaultOptions[attrname]; + for (attrname in options) options[attrname] && ("object" == typeof merged[attrname] ? merged[attrname] = _defaults(merged[attrname], options[attrname]) : merged[attrname] = options[attrname]); + return merged; } - return flowChart.handle(nextSymbol); - }; - } else { - symbol.then = function(nextSymbol) { - symbol.next = nextSymbol; - symbol.pathOk = true; - return flowChart.handle(nextSymbol); - }; - } - - return symbol; - }; - - FlowChart.prototype.startWith = function(symbol) { - this.start = symbol; - return this.handle(symbol); - }; - - FlowChart.prototype.render = function() { - var maxWidth = 0, - maxHeight = 0, - i = 0, - len = 0, - maxX = 0, - maxY = 0, - symbol; - - for (i = 0, len = this.symbols.length; i < len; i++) { - symbol = this.symbols[i]; - if (symbol.width > maxWidth) { - maxWidth = symbol.width; - } - if (symbol.height > maxHeight) { - maxHeight = symbol.height; - } - } - - for (i = 0, len = this.symbols.length; i < len; i++) { - symbol = this.symbols[i]; - symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']); - symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']); - } - - this.start.render(); - // for (i = 0, len = this.symbols.length; i < len; i++) { - // symbol = this.symbols[i]; - // symbol.render(); - // } - - for (i = 0, len = this.symbols.length; i < len; i++) { - symbol = this.symbols[i]; - symbol.renderLines(); - } - - maxX = this.maxXFromLine; - - for (i = 0, len = this.symbols.length; i < len; i++) { - symbol = this.symbols[i]; - var x = symbol.getX() + symbol.width; - var y = symbol.getY() + symbol.height; - if (x > maxX) { - maxX = x; - } - if (y > maxY) { - maxY = y; - } - } - - var scale = this.options['scale']; - var lineWidth = this.options['line-width']; - this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale)); - this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, true); - }; - - FlowChart.prototype.clean = function() { - if (this.paper) { - var paperDom = this.paper.canvas; - paperDom.parentNode.removeChild(paperDom); - } - }; - function Symbol(chart, options, symbol) { - this.chart = chart; - this.group = this.chart.paper.set(); - this.symbol = symbol; - this.connectedTo = []; - this.symbolType = options.symbolType; - this.flowstate = (options.flowstate || 'future'); - - this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined; - - this.text = this.chart.paper.text(0, 0, options.text); - //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t - if (options.key) { this.text.node.id = options.key + 't'; } - this.text.node.setAttribute('class', this.getAttr('class') + 't'); - - this.text.attr({ - 'text-anchor': 'start', - 'x' : this.getAttr('text-margin'), - 'fill' : this.getAttr('font-color'), - 'font-size' : this.getAttr('font-size') - }); - - var font = this.getAttr('font'); - var fontF = this.getAttr('font-family'); - var fontW = this.getAttr('font-weight'); - - if (font) this.text.attr({ 'font': font }); - if (fontF) this.text.attr({ 'font-family': fontF }); - if (fontW) this.text.attr({ 'font-weight': fontW }); - - if (options.link) { this.text.attr('href', options.link); } - if (options.target) { this.text.attr('target', options.target); } - - var maxWidth = this.getAttr('maxWidth'); - if (maxWidth) { - // using this approach: http://stackoverflow.com/a/3153457/22466 - var words = options.text.split(' '); - var tempText = ""; - for (var i=0, ii=words.length; i maxWidth) { - tempText += "\n" + word; - } else { - tempText += " " + word; + function _inherits(ctor, superCtor) { + if ("function" == typeof Object.create) // implementation from standard node.js 'util' module + ctor.super_ = superCtor, ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: !1, + writable: !0, + configurable: !0 + } + }); else { + // old school shim for old browsers + ctor.super_ = superCtor; + var TempCtor = function() {}; + TempCtor.prototype = superCtor.prototype, ctor.prototype = new TempCtor(), ctor.prototype.constructor = ctor; + } } - } - this.text.attr("text", tempText.substring(1)); - } - - this.group.push(this.text); - - if (symbol) { - var tmpMargin = this.getAttr('text-margin'); - - symbol.attr({ - 'fill' : this.getAttr('fill'), - 'stroke' : this.getAttr('element-color'), - 'stroke-width' : this.getAttr('line-width'), - 'width' : this.text.getBBox().width + 2 * tmpMargin, - 'height' : this.text.getBBox().height + 2 * tmpMargin - }); - - symbol.node.setAttribute('class', this.getAttr('class')); - - if (options.link) { symbol.attr('href', options.link); } - if (options.target) { symbol.attr('target', options.target); } - if (options.key) { symbol.node.id = options.key; } - - this.group.push(symbol); - symbol.insertBefore(this.text); - - this.text.attr({ - 'y': symbol.getBBox().height/2 - }); - - this.initialize(); - } - - } - - /* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */ - Symbol.prototype.getAttr = function(attName) { - if (!this.chart) { - return undefined; - } - var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined; - var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined; - var opt1; - if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) { - opt1 = this.chart.options.flowstate[this.flowstate][attName]; - } - return (opt1 || opt2 || opt3); - }; - - Symbol.prototype.initialize = function() { - this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width')); - - this.width = this.group.getBBox().width; - this.height = this.group.getBBox().height; - }; - - Symbol.prototype.getCenter = function() { - return {x: this.getX() + this.width/2, - y: this.getY() + this.height/2}; - }; - - Symbol.prototype.getX = function() { - return this.group.getBBox().x; - }; - - Symbol.prototype.getY = function() { - return this.group.getBBox().y; - }; - - Symbol.prototype.shiftX = function(x) { - this.group.transform('t' + (this.getX() + x) + ',' + this.getY()); - }; - - Symbol.prototype.setX = function(x) { - this.group.transform('t' + x + ',' + this.getY()); - }; - - Symbol.prototype.shiftY = function(y) { - this.group.transform('t' + this.getX() + ',' + (this.getY() + y)); - }; - - Symbol.prototype.setY = function(y) { - this.group.transform('t' + this.getX() + ',' + y); - }; - - Symbol.prototype.getTop = function() { - var y = this.getY(); - var x = this.getX() + this.width/2; - return {x: x, y: y}; - }; - - Symbol.prototype.getBottom = function() { - var y = this.getY() + this.height; - var x = this.getX() + this.width/2; - return {x: x, y: y}; - }; - - Symbol.prototype.getLeft = function() { - var y = this.getY() + this.group.getBBox().height/2; - var x = this.getX(); - return {x: x, y: y}; - }; - - Symbol.prototype.getRight = function() { - var y = this.getY() + this.group.getBBox().height/2; - var x = this.getX() + this.group.getBBox().width; - return {x: x, y: y}; - }; - - Symbol.prototype.render = function() { - if (this.next) { - - var lineLength = this.getAttr('line-length'); - - if (this.next_direction === 'right') { - - var rightPoint = this.getRight(); - var leftPoint = this.next.getLeft(); - - if (!this.next.isPositioned) { - - this.next.setY(rightPoint.y - this.next.height/2); - this.next.shiftX(this.group.getBBox().x + this.width + lineLength); - - var self = this; - (function shift() { - var hasSymbolUnder = false; - var symb; - for (var i = 0, len = self.chart.symbols.length; i < len; i++) { - symb = self.chart.symbols[i]; - - var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x); - if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) { - hasSymbolUnder = true; - break; - } + // move dependent functions to a container so that + // they can be overriden easier in no jquery environment (node.js) + module.exports = { + defaults: _defaults, + inherits: _inherits + }; + }, /* 2 */ + /*!*********************************!*\ + !*** ./src/flowchart.symbol.js ***! + \*********************************/ + /***/ + function(module, exports, __webpack_require__) { + function Symbol(chart, options, symbol) { + this.chart = chart, this.group = this.chart.paper.set(), this.symbol = symbol, this.connectedTo = [], + this.symbolType = options.symbolType, this.flowstate = options.flowstate || "future", + this.next_direction = options.next && options.direction_next ? options.direction_next : void 0, + this.text = this.chart.paper.text(0, 0, options.text), //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t + options.key && (this.text.node.id = options.key + "t"), this.text.node.setAttribute("class", this.getAttr("class") + "t"), + this.text.attr({ + "text-anchor": "start", + x: this.getAttr("text-margin"), + fill: this.getAttr("font-color"), + "font-size": this.getAttr("font-size") + }); + var font = this.getAttr("font"), fontF = this.getAttr("font-family"), fontW = this.getAttr("font-weight"); + font && this.text.attr({ + font: font + }), fontF && this.text.attr({ + "font-family": fontF + }), fontW && this.text.attr({ + "font-weight": fontW + }), options.link && this.text.attr("href", options.link), options.target && this.text.attr("target", options.target); + var maxWidth = this.getAttr("maxWidth"); + if (maxWidth) { + for (var words = options.text.split(" "), tempText = "", i = 0, ii = words.length; ii > i; i++) { + var word = words[i]; + this.text.attr("text", tempText + " " + word), tempText += this.text.getBBox().width > maxWidth ? "\n" + word : " " + word; + } + this.text.attr("text", tempText.substring(1)); } - - if (hasSymbolUnder) { - self.next.setX(symb.getX() + symb.width + lineLength); - shift(); + if (this.group.push(this.text), symbol) { + var tmpMargin = this.getAttr("text-margin"); + symbol.attr({ + fill: this.getAttr("fill"), + stroke: this.getAttr("element-color"), + "stroke-width": this.getAttr("line-width"), + width: this.text.getBBox().width + 2 * tmpMargin, + height: this.text.getBBox().height + 2 * tmpMargin + }), symbol.node.setAttribute("class", this.getAttr("class")), options.link && symbol.attr("href", options.link), + options.target && symbol.attr("target", options.target), options.key && (symbol.node.id = options.key), + this.group.push(symbol), symbol.insertBefore(this.text), this.text.attr({ + y: symbol.getBBox().height / 2 + }), this.initialize(); } - })(); - - this.next.isPositioned = true; - - this.next.render(); - } - } else { - var bottomPoint = this.getBottom(); - var topPoint = this.next.getTop(); - - if (!this.next.isPositioned) { - this.next.shiftY(this.getY() + this.height + lineLength); - this.next.setX(bottomPoint.x - this.next.width/2); - this.next.isPositioned = true; - - this.next.render(); } - } - } - }; - - Symbol.prototype.renderLines = function() { - if (this.next) { - if (this.next_direction) { - this.drawLineTo(this.next, '', this.next_direction); - } else { - this.drawLineTo(this.next); - } - } - }; - - Symbol.prototype.drawLineTo = function(symbol, text, origin) { - if (this.connectedTo.indexOf(symbol) < 0) { - this.connectedTo.push(symbol); - } - - var x = this.getCenter().x, - y = this.getCenter().y, - top = this.getTop(), - right = this.getRight(), - bottom = this.getBottom(), - left = this.getLeft(); - - var symbolX = symbol.getCenter().x, - symbolY = symbol.getCenter().y, - symbolTop = symbol.getTop(), - symbolRight = symbol.getRight(), - symbolBottom = symbol.getBottom(), - symbolLeft = symbol.getLeft(); - - var isOnSameColumn = x === symbolX, - isOnSameLine = y === symbolY, - isUnder = y < symbolY, - isUpper = y > symbolY, - isLeft = x > symbolX, - isRight = x < symbolX; - - var maxX = 0, - line, - lineLength = this.getAttr('line-length'), - lineWith = this.getAttr('line-width'); - - if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) { - line = drawLine(this.chart, bottom, symbolTop, text); - this.bottomStart = true; - symbol.topEnd = true; - maxX = bottom.x; - } else if ((!origin || origin === 'right') && isOnSameLine && isRight) { - line = drawLine(this.chart, right, symbolLeft, text); - this.rightStart = true; - symbol.leftEnd = true; - maxX = symbolLeft.x; - } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) { - line = drawLine(this.chart, left, symbolRight, text); - this.leftStart = true; - symbol.rightEnd = true; - maxX = symbolRight.x; - } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) { - line = drawLine(this.chart, right, [ - {x: right.x + lineLength/2, y: right.y}, - {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.rightStart = true; - symbol.topEnd = true; - maxX = right.x + lineLength/2; - } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) { - line = drawLine(this.chart, right, [ - {x: right.x + lineLength/2, y: right.y}, - {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.rightStart = true; - symbol.topEnd = true; - maxX = right.x + lineLength/2; - } else if ((!origin || origin === 'bottom') && isLeft) { - if (this.leftEnd && isUpper) { - line = drawLine(this.chart, bottom, [ - {x: bottom.x, y: bottom.y + lineLength/2}, - {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2}, - {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - } else { - line = drawLine(this.chart, bottom, [ - {x: bottom.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - } - this.bottomStart = true; - symbol.topEnd = true; - maxX = bottom.x + (bottom.x - symbolTop.x)/2; - } else if ((!origin || origin === 'bottom') && isRight) { - line = drawLine(this.chart, bottom, [ - {x: bottom.x, y: bottom.y + lineLength/2}, - {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2}, - {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.bottomStart = true; - symbol.topEnd = true; - maxX = bottom.x + (bottom.x - symbolTop.x)/2; - } else if ((origin && origin === 'right') && isLeft) { - line = drawLine(this.chart, right, [ - {x: right.x + lineLength/2, y: right.y}, - {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.rightStart = true; - symbol.topEnd = true; - maxX = right.x + lineLength/2; - } else if ((origin && origin === 'right') && isRight) { - line = drawLine(this.chart, right, [ - {x: symbolTop.x, y: right.y}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.rightStart = true; - symbol.topEnd = true; - maxX = right.x + lineLength/2; - } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) { - line = drawLine(this.chart, bottom, [ - {x: bottom.x, y: bottom.y + lineLength/2}, - {x: right.x + lineLength/2, y: bottom.y + lineLength/2}, - {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.bottomStart = true; - symbol.topEnd = true; - maxX = bottom.x + lineLength/2; - } else if ((origin === 'left') && isOnSameColumn && isUpper) { - var diffX = left.x - lineLength/2; - if (symbolLeft.x < left.x) { - diffX = symbolLeft.x - lineLength/2; - } - line = drawLine(this.chart, left, [ - {x: diffX, y: left.y}, - {x: diffX, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.leftStart = true; - symbol.topEnd = true; - maxX = left.x; - } else if ((origin === 'left')) { - line = drawLine(this.chart, left, [ - {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y}, - {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y - lineLength/2}, - {x: symbolTop.x, y: symbolTop.y} - ], text); - this.leftStart = true; - symbol.topEnd = true; - maxX = left.x; - } - - if (line) { - var self = this; - for (var l = 0, llen = this.chart.lines.length; l < llen; l++) { - var otherLine = this.chart.lines[l]; - var i, - len, - intersections, - inter; - - var ePath = otherLine.attr('path'), - lPath = line.attr('path'); - - for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) { - var newPath = []; - newPath.push(['M', ePath[iP][1], ePath[iP][2]]); - newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]); - - var line1_from_x = newPath[0][1]; - var line1_from_y = newPath[0][2]; - var line1_to_x = newPath[1][1]; - var line1_to_y = newPath[1][2]; - - for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) { - var newLinePath = []; - newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]); - newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]); - - var line2_from_x = newLinePath[0][1]; - var line2_from_y = newLinePath[0][2]; - var line2_to_x = newLinePath[1][1]; - var line2_to_y = newLinePath[1][2]; - - 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); - if (res.onLine1 && res.onLine2) { - - var newSegment; - if (line2_from_y === line2_to_y) { - if (line2_from_x > line2_to_x) { - newSegment = ['L', res.x + lineWith * 2, line2_from_y]; - lPath.splice(lP + 1, 0, newSegment); - newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y]; - lPath.splice(lP + 2, 0, newSegment); - line.attr('path', lPath); + var drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3), drawLine = drawAPI.drawLine, checkLineIntersection = drawAPI.checkLineIntersection; + /* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */ + Symbol.prototype.getAttr = function(attName) { + if (this.chart) { + var opt1, opt3 = this.chart.options ? this.chart.options[attName] : void 0, opt2 = this.chart.options.symbols ? this.chart.options.symbols[this.symbolType][attName] : void 0; + return this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate] && (opt1 = this.chart.options.flowstate[this.flowstate][attName]), + opt1 || opt2 || opt3; + } + }, Symbol.prototype.initialize = function() { + this.group.transform("t" + this.getAttr("line-width") + "," + this.getAttr("line-width")), + this.width = this.group.getBBox().width, this.height = this.group.getBBox().height; + }, Symbol.prototype.getCenter = function() { + return { + x: this.getX() + this.width / 2, + y: this.getY() + this.height / 2 + }; + }, Symbol.prototype.getX = function() { + return this.group.getBBox().x; + }, Symbol.prototype.getY = function() { + return this.group.getBBox().y; + }, Symbol.prototype.shiftX = function(x) { + this.group.transform("t" + (this.getX() + x) + "," + this.getY()); + }, Symbol.prototype.setX = function(x) { + this.group.transform("t" + x + "," + this.getY()); + }, Symbol.prototype.shiftY = function(y) { + this.group.transform("t" + this.getX() + "," + (this.getY() + y)); + }, Symbol.prototype.setY = function(y) { + this.group.transform("t" + this.getX() + "," + y); + }, Symbol.prototype.getTop = function() { + var y = this.getY(), x = this.getX() + this.width / 2; + return { + x: x, + y: y + }; + }, Symbol.prototype.getBottom = function() { + var y = this.getY() + this.height, x = this.getX() + this.width / 2; + return { + x: x, + y: y + }; + }, Symbol.prototype.getLeft = function() { + var y = this.getY() + this.group.getBBox().height / 2, x = this.getX(); + return { + x: x, + y: y + }; + }, Symbol.prototype.getRight = function() { + var y = this.getY() + this.group.getBBox().height / 2, x = this.getX() + this.group.getBBox().width; + return { + x: x, + y: y + }; + }, Symbol.prototype.render = function() { + if (this.next) { + var lineLength = this.getAttr("line-length"); + if ("right" === this.next_direction) { + var rightPoint = this.getRight(); + if (!this.next.isPositioned) { + this.next.setY(rightPoint.y - this.next.height / 2), this.next.shiftX(this.group.getBBox().x + this.width + lineLength); + var self = this; + !function shift() { + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; len > i; i++) { + symb = self.chart.symbols[i]; + var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x); + if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width / 2) { + hasSymbolUnder = !0; + break; + } + } + hasSymbolUnder && (self.next.setX(symb.getX() + symb.width + lineLength), shift()); + }(), this.next.isPositioned = !0, this.next.render(); + } } else { - newSegment = ['L', res.x - lineWith * 2, line2_from_y]; - lPath.splice(lP + 1, 0, newSegment); - newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y]; - lPath.splice(lP + 2, 0, newSegment); - line.attr('path', lPath); + var bottomPoint = this.getBottom(); + this.next.isPositioned || (this.next.shiftY(this.getY() + this.height + lineLength), + this.next.setX(bottomPoint.x - this.next.width / 2), this.next.isPositioned = !0, + this.next.render()); } - } else { - if (line2_from_y > line2_to_y) { - newSegment = ['L', line2_from_x, res.y + lineWith * 2]; - lPath.splice(lP + 1, 0, newSegment); - newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2]; - lPath.splice(lP + 2, 0, newSegment); - line.attr('path', lPath); - } else { - newSegment = ['L', line2_from_x, res.y - lineWith * 2]; - lPath.splice(lP + 1, 0, newSegment); - newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2]; - lPath.splice(lP + 2, 0, newSegment); - line.attr('path', lPath); + } + }, Symbol.prototype.renderLines = function() { + this.next && (this.next_direction ? this.drawLineTo(this.next, "", this.next_direction) : this.drawLineTo(this.next)); + }, Symbol.prototype.drawLineTo = function(symbol, text, origin) { + this.connectedTo.indexOf(symbol) < 0 && this.connectedTo.push(symbol); + var line, x = this.getCenter().x, y = this.getCenter().y, right = this.getRight(), bottom = this.getBottom(), left = this.getLeft(), symbolX = symbol.getCenter().x, symbolY = symbol.getCenter().y, symbolTop = symbol.getTop(), symbolRight = symbol.getRight(), symbolLeft = symbol.getLeft(), isOnSameColumn = x === symbolX, isOnSameLine = y === symbolY, isUnder = symbolY > y, isUpper = y > symbolY, isLeft = x > symbolX, isRight = symbolX > x, maxX = 0, lineLength = this.getAttr("line-length"), lineWith = this.getAttr("line-width"); + if (origin && "bottom" !== origin || !isOnSameColumn || !isUnder) if (origin && "right" !== origin || !isOnSameLine || !isRight) if (origin && "left" !== origin || !isOnSameLine || !isLeft) if (origin && "right" !== origin || !isOnSameColumn || !isUpper) if (origin && "right" !== origin || !isOnSameColumn || !isUnder) if (origin && "bottom" !== origin || !isLeft) if (origin && "bottom" !== origin || !isRight) if (origin && "right" === origin && isLeft) line = drawLine(this.chart, right, [ { + x: right.x + lineLength / 2, + y: right.y + }, { + x: right.x + lineLength / 2, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y + } ], text), this.rightStart = !0, symbol.topEnd = !0, maxX = right.x + lineLength / 2; else if (origin && "right" === origin && isRight) line = drawLine(this.chart, right, [ { + x: symbolTop.x, + y: right.y + }, { + x: symbolTop.x, + y: symbolTop.y + } ], text), this.rightStart = !0, symbol.topEnd = !0, maxX = right.x + lineLength / 2; else if (origin && "bottom" === origin && isOnSameColumn && isUpper) line = drawLine(this.chart, bottom, [ { + x: bottom.x, + y: bottom.y + lineLength / 2 + }, { + x: right.x + lineLength / 2, + y: bottom.y + lineLength / 2 + }, { + x: right.x + lineLength / 2, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y + } ], text), this.bottomStart = !0, symbol.topEnd = !0, maxX = bottom.x + lineLength / 2; else if ("left" === origin && isOnSameColumn && isUpper) { + var diffX = left.x - lineLength / 2; + symbolLeft.x < left.x && (diffX = symbolLeft.x - lineLength / 2), line = drawLine(this.chart, left, [ { + x: diffX, + y: left.y + }, { + x: diffX, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y + } ], text), this.leftStart = !0, symbol.topEnd = !0, maxX = left.x; + } else "left" === origin && (line = drawLine(this.chart, left, [ { + x: symbolTop.x + (left.x - symbolTop.x) / 2, + y: left.y + }, { + x: symbolTop.x + (left.x - symbolTop.x) / 2, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y + } ], text), this.leftStart = !0, symbol.topEnd = !0, maxX = left.x); else line = drawLine(this.chart, bottom, [ { + x: bottom.x, + y: bottom.y + lineLength / 2 + }, { + x: bottom.x + (bottom.x - symbolTop.x) / 2, + y: bottom.y + lineLength / 2 + }, { + x: bottom.x + (bottom.x - symbolTop.x) / 2, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y + } ], text), this.bottomStart = !0, symbol.topEnd = !0, maxX = bottom.x + (bottom.x - symbolTop.x) / 2; else line = this.leftEnd && isUpper ? drawLine(this.chart, bottom, [ { + x: bottom.x, + y: bottom.y + lineLength / 2 + }, { + x: bottom.x + (bottom.x - symbolTop.x) / 2, + y: bottom.y + lineLength / 2 + }, { + x: bottom.x + (bottom.x - symbolTop.x) / 2, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y + } ], text) : drawLine(this.chart, bottom, [ { + x: bottom.x, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y + } ], text), this.bottomStart = !0, symbol.topEnd = !0, maxX = bottom.x + (bottom.x - symbolTop.x) / 2; else line = drawLine(this.chart, right, [ { + x: right.x + lineLength / 2, + y: right.y + }, { + x: right.x + lineLength / 2, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y + } ], text), this.rightStart = !0, symbol.topEnd = !0, maxX = right.x + lineLength / 2; else line = drawLine(this.chart, right, [ { + x: right.x + lineLength / 2, + y: right.y + }, { + x: right.x + lineLength / 2, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y + } ], text), this.rightStart = !0, symbol.topEnd = !0, maxX = right.x + lineLength / 2; else line = drawLine(this.chart, left, symbolRight, text), + this.leftStart = !0, symbol.rightEnd = !0, maxX = symbolRight.x; else line = drawLine(this.chart, right, symbolLeft, text), + this.rightStart = !0, symbol.leftEnd = !0, maxX = symbolLeft.x; else line = drawLine(this.chart, bottom, symbolTop, text), + this.bottomStart = !0, symbol.topEnd = !0, maxX = bottom.x; + if (line) { + for (var l = 0, llen = this.chart.lines.length; llen > l; l++) for (var len, otherLine = this.chart.lines[l], ePath = otherLine.attr("path"), lPath = line.attr("path"), iP = 0, lenP = ePath.length - 1; lenP > iP; iP++) { + var newPath = []; + newPath.push([ "M", ePath[iP][1], ePath[iP][2] ]), newPath.push([ "L", ePath[iP + 1][1], ePath[iP + 1][2] ]); + for (var line1_from_x = newPath[0][1], line1_from_y = newPath[0][2], line1_to_x = newPath[1][1], line1_to_y = newPath[1][2], lP = 0, lenlP = lPath.length - 1; lenlP > lP; lP++) { + var newLinePath = []; + newLinePath.push([ "M", lPath[lP][1], lPath[lP][2] ]), newLinePath.push([ "L", lPath[lP + 1][1], lPath[lP + 1][2] ]); + var line2_from_x = newLinePath[0][1], line2_from_y = newLinePath[0][2], line2_to_x = newLinePath[1][1], line2_to_y = newLinePath[1][2], 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); + if (res.onLine1 && res.onLine2) { + var newSegment; + line2_from_y === line2_to_y ? line2_from_x > line2_to_x ? (newSegment = [ "L", res.x + 2 * lineWith, line2_from_y ], + lPath.splice(lP + 1, 0, newSegment), newSegment = [ "C", res.x + 2 * lineWith, line2_from_y, res.x, line2_from_y - 4 * lineWith, res.x - 2 * lineWith, line2_from_y ], + lPath.splice(lP + 2, 0, newSegment), line.attr("path", lPath)) : (newSegment = [ "L", res.x - 2 * lineWith, line2_from_y ], + lPath.splice(lP + 1, 0, newSegment), newSegment = [ "C", res.x - 2 * lineWith, line2_from_y, res.x, line2_from_y - 4 * lineWith, res.x + 2 * lineWith, line2_from_y ], + lPath.splice(lP + 2, 0, newSegment), line.attr("path", lPath)) : line2_from_y > line2_to_y ? (newSegment = [ "L", line2_from_x, res.y + 2 * lineWith ], + lPath.splice(lP + 1, 0, newSegment), newSegment = [ "C", line2_from_x, res.y + 2 * lineWith, line2_from_x + 4 * lineWith, res.y, line2_from_x, res.y - 2 * lineWith ], + lPath.splice(lP + 2, 0, newSegment), line.attr("path", lPath)) : (newSegment = [ "L", line2_from_x, res.y - 2 * lineWith ], + lPath.splice(lP + 1, 0, newSegment), newSegment = [ "C", line2_from_x, res.y - 2 * lineWith, line2_from_x + 4 * lineWith, res.y, line2_from_x, res.y + 2 * lineWith ], + lPath.splice(lP + 2, 0, newSegment), line.attr("path", lPath)), lP += 2, len += 2; + } + } } - } - - lP += 2; - len += 2; + this.chart.lines.push(line); } - } + (!this.chart.maxXFromLine || this.chart.maxXFromLine && maxX > this.chart.maxXFromLine) && (this.chart.maxXFromLine = maxX); + }, module.exports = Symbol; + }, /* 3 */ + /*!************************************!*\ + !*** ./src/flowchart.functions.js ***! + \************************************/ + /***/ + function(module, exports) { + function drawPath(chart, location, points) { + var i, len, path = "M{0},{1}"; + for (i = 2, len = 2 * points.length + 2; len > i; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; + var pathValues = [ location.x, location.y ]; + for (i = 0, len = points.length; len > i; i++) pathValues.push(points[i].x), pathValues.push(points[i].y); + var symbol = chart.paper.path(path, pathValues); + symbol.attr("stroke", chart.options["element-color"]), symbol.attr("stroke-width", chart.options["line-width"]); + var font = chart.options.font, fontF = chart.options["font-family"], fontW = chart.options["font-weight"]; + return font && symbol.attr({ + font: font + }), fontF && symbol.attr({ + "font-family": fontF + }), fontW && symbol.attr({ + "font-weight": fontW + }), symbol; } - } - - this.chart.lines.push(line); - } - - if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) { - this.chart.maxXFromLine = maxX; - } - }; - function Start(chart, options) { - var symbol = chart.paper.rect(0, 0, 0, 0, 20); - options = options || {}; - options.text = options.text || 'Start'; - Symbol.call(this, chart, options, symbol); - } - f.inherits(Start, Symbol); - - - // Start.prototype.render = function() { - // if (this.next) { - // var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length']; - - // var bottomPoint = this.getBottom(); - // var topPoint = this.next.getTop(); - - // if (!this.next.isPositioned) { - // this.next.shiftY(this.getY() + this.height + lineLength); - // this.next.setX(bottomPoint.x - this.next.width/2); - // this.next.isPositioned = true; - - // this.next.render(); - // } - // } - // }; - - // Start.prototype.renderLines = function() { - // if (this.next) { - // this.drawLineTo(this.next); - // } - // }; - function End(chart, options) { - var symbol = chart.paper.rect(0, 0, 0, 0, 20); - options = options || {}; - options.text = options.text || 'End'; - Symbol.call(this, chart, options, symbol); - } - f.inherits(End, Symbol); - function Operation(chart, options) { - var symbol = chart.paper.rect(0, 0, 0, 0); - options = options || {}; - Symbol.call(this, chart, options, symbol); - } - f.inherits(Operation, Symbol); - function Subroutine(chart, options) { - var symbol = chart.paper.rect(0, 0, 0, 0); - options = options || {}; - Symbol.call(this, chart, options, symbol); - - symbol.attr({ - width: this.text.getBBox().width + 4 * this.getAttr('text-margin') - }); - - this.text.attr({ - 'x': 2 * this.getAttr('text-margin') - }); - - var innerWrap = chart.paper.rect(0, 0, 0, 0); - innerWrap.attr({ - x: this.getAttr('text-margin'), - stroke: this.getAttr('element-color'), - 'stroke-width': this.getAttr('line-width'), - width: this.text.getBBox().width + 2 * this.getAttr('text-margin'), - height: this.text.getBBox().height + 2 * this.getAttr('text-margin'), - fill: this.getAttr('fill') - }); - if (options.key) { innerWrap.node.id = options.key + 'i'; } - - var font = this.getAttr('font'); - var fontF = this.getAttr('font-family'); - var fontW = this.getAttr('font-weight'); - - if (font) innerWrap.attr({ 'font': font }); - if (fontF) innerWrap.attr({ 'font-family': fontF }); - if (fontW) innerWrap.attr({ 'font-weight': fontW }); - - if (options.link) { innerWrap.attr('href', options.link); } - if (options.target) { innerWrap.attr('target', options.target); } - this.group.push(innerWrap); - innerWrap.insertBefore(this.text); - - this.initialize(); - } - f.inherits(Subroutine, Symbol); - function InputOutput(chart, options) { - options = options || {}; - Symbol.call(this, chart, options); - this.textMargin = this.getAttr('text-margin'); - - this.text.attr({ - x: this.textMargin * 3 - }); - - var width = this.text.getBBox().width + 4 * this.textMargin; - var height = this.text.getBBox().height + 2 * this.textMargin; - var startX = this.textMargin; - var startY = height/2; - - var start = {x: startX, y: startY}; - var points = [ - {x: startX - this.textMargin, y: height}, - {x: startX - this.textMargin + width, y: height}, - {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0}, - {x: startX - this.textMargin + 2 * this.textMargin, y: 0}, - {x: startX, y: startY} - ]; - - var symbol = drawPath(chart, start, points); - - symbol.attr({ - stroke: this.getAttr('element-color'), - 'stroke-width': this.getAttr('line-width'), - fill: this.getAttr('fill') - }); - if (options.link) { symbol.attr('href', options.link); } - if (options.target) { symbol.attr('target', options.target); } - if (options.key) { symbol.node.id = options.key; } - symbol.node.setAttribute('class', this.getAttr('class')); - - this.text.attr({ - y: symbol.getBBox().height/2 - }); - - this.group.push(symbol); - symbol.insertBefore(this.text); - - this.initialize(); - } - f.inherits(InputOutput, Symbol); - - InputOutput.prototype.getLeft = function() { - var y = this.getY() + this.group.getBBox().height/2; - var x = this.getX() + this.textMargin; - return {x: x, y: y}; - }; - - InputOutput.prototype.getRight = function() { - var y = this.getY() + this.group.getBBox().height/2; - var x = this.getX() + this.group.getBBox().width - this.textMargin; - return {x: x, y: y}; - }; - function Condition(chart, options) { - options = options || {}; - Symbol.call(this, chart, options); - this.textMargin = this.getAttr('text-margin'); - this.yes_direction = 'bottom'; - this.no_direction = 'right'; - if (options.yes && options['direction_yes'] && options.no && !options['direction_no']) { - if (options['direction_yes'] === 'right') { - this.no_direction = 'bottom'; - this.yes_direction = 'right'; - } else { - this.no_direction = 'right'; - this.yes_direction = 'bottom'; - } - } else if (options.yes && !options['direction_yes'] && options.no && options['direction_no']) { - if (options['direction_no'] === 'right') { - this.yes_direction = 'bottom'; - this.no_direction = 'right'; - } else { - this.yes_direction = 'right'; - this.no_direction = 'bottom'; - } - } else { - this.yes_direction = 'bottom'; - this.no_direction = 'right'; - } - - this.yes_direction = this.yes_direction || 'bottom'; - this.no_direction = this.no_direction || 'right'; - - this.text.attr({ - x: this.textMargin * 2 - }); - - var width = this.text.getBBox().width + 3 * this.textMargin; - width += width/2; - var height = this.text.getBBox().height + 2 * this.textMargin; - height += height/2; - height = Math.max(width * 0.5, height); - var startX = width/4; - var startY = height/4; - - this.text.attr({ - x: startX + this.textMargin/2 - }); - - var start = {x: startX, y: startY}; - var points = [ - {x: startX - width/4, y: startY + height/4}, - {x: startX - width/4 + width/2, y: startY + height/4 + height/2}, - {x: startX - width/4 + width, y: startY + height/4}, - {x: startX - width/4 + width/2, y: startY + height/4 - height/2}, - {x: startX - width/4, y: startY + height/4} - ]; - - var symbol = drawPath(chart, start, points); - - symbol.attr({ - stroke: this.getAttr('element-color'), - 'stroke-width': this.getAttr('line-width'), - fill: this.getAttr('fill') - }); - if (options.link) { symbol.attr('href', options.link); } - if (options.target) { symbol.attr('target', options.target); } - if (options.key) { symbol.node.id = options.key; } - symbol.node.setAttribute('class', this.getAttr('class')); - - this.text.attr({ - y: symbol.getBBox().height/2 - }); - - this.group.push(symbol); - symbol.insertBefore(this.text); - - this.initialize(); - } - f.inherits(Condition, Symbol); - - Condition.prototype.render = function() { - - if (this.yes_direction) { - this[this.yes_direction + '_symbol'] = this.yes_symbol; - } - - if (this.no_direction) { - this[this.no_direction + '_symbol'] = this.no_symbol; - } - - var lineLength = this.getAttr('line-length'); - - if (this.bottom_symbol) { - var bottomPoint = this.getBottom(); - var topPoint = this.bottom_symbol.getTop(); - - if (!this.bottom_symbol.isPositioned) { - this.bottom_symbol.shiftY(this.getY() + this.height + lineLength); - this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2); - this.bottom_symbol.isPositioned = true; - - this.bottom_symbol.render(); - } - } - - if (this.right_symbol) { - var rightPoint = this.getRight(); - var leftPoint = this.right_symbol.getLeft(); - - if (!this.right_symbol.isPositioned) { - - this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2); - this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength); - - var self = this; - (function shift() { - var hasSymbolUnder = false; - var symb; - for (var i = 0, len = self.chart.symbols.length; i < len; i++) { - symb = self.chart.symbols[i]; - - var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); - if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) { - hasSymbolUnder = true; - break; + function drawLine(chart, from, to, text) { + var i, len; + "[object Array]" !== Object.prototype.toString.call(to) && (to = [ to ]); + var path = "M{0},{1}"; + for (i = 2, len = 2 * to.length + 2; len > i; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; + var pathValues = [ from.x, from.y ]; + for (i = 0, len = to.length; len > i; i++) pathValues.push(to[i].x), pathValues.push(to[i].y); + var line = chart.paper.path(path, pathValues); + line.attr({ + stroke: chart.options["line-color"], + "stroke-width": chart.options["line-width"], + "arrow-end": chart.options["arrow-end"] + }); + var font = chart.options.font, fontF = chart.options["font-family"], fontW = chart.options["font-weight"]; + if (font && line.attr({ + font: font + }), fontF && line.attr({ + "font-family": fontF + }), fontW && line.attr({ + "font-weight": fontW + }), text) { + var centerText = !1, textPath = chart.paper.text(0, 0, text), isHorizontal = !1, firstTo = to[0]; + from.y === firstTo.y && (isHorizontal = !0); + var x = 0, y = 0; + centerText ? (x = from.x > firstTo.x ? from.x - (from.x - firstTo.x) / 2 : firstTo.x - (firstTo.x - from.x) / 2, + y = from.y > firstTo.y ? from.y - (from.y - firstTo.y) / 2 : firstTo.y - (firstTo.y - from.y) / 2, + isHorizontal ? (x -= textPath.getBBox().width / 2, y -= chart.options["text-margin"]) : (x += chart.options["text-margin"], + y -= textPath.getBBox().height / 2)) : (x = from.x, y = from.y, isHorizontal ? (x += chart.options["text-margin"] / 2, + y -= chart.options["text-margin"]) : (x += chart.options["text-margin"] / 2, y += chart.options["text-margin"])), + textPath.attr({ + "text-anchor": "start", + "font-size": chart.options["font-size"], + fill: chart.options["font-color"], + x: x, + y: y + }), font && textPath.attr({ + font: font + }), fontF && textPath.attr({ + "font-family": fontF + }), fontW && textPath.attr({ + "font-weight": fontW + }); } - } - - if (hasSymbolUnder) { - self.right_symbol.setX(symb.getX() + symb.width + lineLength); - shift(); - } - })(); - - this.right_symbol.isPositioned = true; - - this.right_symbol.render(); - } - } - }; - - Condition.prototype.renderLines = function() { - if (this.yes_symbol) { - this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction); - } - - if (this.no_symbol) { - this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction); - } - }; - function parse(input) { - input = input || ''; - input = input.trim(); - - var chart = { - symbols: {}, - start: null, - drawSVG: function(container, options) { - var self = this; - - if (this.diagram) { - this.diagram.clean(); + return line; } - - var diagram = new FlowChart(container, options); - this.diagram = diagram; - var dispSymbols = {}; - - function getDisplaySymbol(s) { - if (dispSymbols[s.key]) { - return dispSymbols[s.key]; - } - - switch (s.symbolType) { - case 'start': - dispSymbols[s.key] = new Start(diagram, s); - break; - case 'end': - dispSymbols[s.key] = new End(diagram, s); - break; - case 'operation': - dispSymbols[s.key] = new Operation(diagram, s); - break; - case 'inputoutput': - dispSymbols[s.key] = new InputOutput(diagram, s); - break; - case 'subroutine': - dispSymbols[s.key] = new Subroutine(diagram, s); - break; - case 'condition': - dispSymbols[s.key] = new Condition(diagram, s); - break; - default: - return new Error('Wrong symbol type!'); - } - - return dispSymbols[s.key]; + function checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) { + // 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 + var denominator, a, b, numerator1, numerator2, result = { + x: null, + y: null, + onLine1: !1, + onLine2: !1 + }; + // if we cast these lines infinitely in both directions, they intersect here: + /* + // it is worth noting that this should be the same as: + x = line2StartX + (b * (line2EndX - line2StartX)); + y = line2StartX + (b * (line2EndY - line2StartY)); + */ + // if line1 is a segment and line2 is infinite, they intersect if: + // if line2 is a segment and line1 is infinite, they intersect if: + return denominator = (line2EndY - line2StartY) * (line1EndX - line1StartX) - (line2EndX - line2StartX) * (line1EndY - line1StartY), + 0 === denominator ? result : (a = line1StartY - line2StartY, b = line1StartX - line2StartX, + numerator1 = (line2EndX - line2StartX) * a - (line2EndY - line2StartY) * b, numerator2 = (line1EndX - line1StartX) * a - (line1EndY - line1StartY) * b, + a = numerator1 / denominator, b = numerator2 / denominator, result.x = line1StartX + a * (line1EndX - line1StartX), + result.y = line1StartY + a * (line1EndY - line1StartY), a > 0 && 1 > a && (result.onLine1 = !0), + b > 0 && 1 > b && (result.onLine2 = !0), result); } - - (function constructChart(s, prevDisp, prev) { - var dispSymb = getDisplaySymbol(s); - - if (self.start === s) { - diagram.startWith(dispSymb); - } else if (prevDisp && prev && !prevDisp.pathOk) { - if (prevDisp instanceof(Condition)) { - if (prev.yes === s) { - prevDisp.yes(dispSymb); - } - if (prev.no === s) { - prevDisp.no(dispSymb); - } - } else { - prevDisp.then(dispSymb); + module.exports = { + drawPath: drawPath, + drawLine: drawLine, + checkLineIntersection: checkLineIntersection + }; + }, /* 4 */ + /*!********************************!*\ + !*** ./src/flowchart.parse.js ***! + \********************************/ + /***/ + function(module, exports, __webpack_require__) { + function parse(input) { + function getSymbol(s) { + var startIndex = s.indexOf("(") + 1, endIndex = s.indexOf(")"); + return startIndex >= 0 && endIndex >= 0 ? chart.symbols[s.substring(0, startIndex - 1)] : chart.symbols[s]; + } + function getNextPath(s) { + var next = "next", startIndex = s.indexOf("(") + 1, endIndex = s.indexOf(")"); + return startIndex >= 0 && endIndex >= 0 && (next = flowSymb.substring(startIndex, endIndex), + next.indexOf(",") < 0 && "yes" !== next && "no" !== next && (next = "next, " + next)), + next; + } + input = input || "", input = input.trim(); + for (var chart = { + symbols: {}, + start: null, + drawSVG: function(container, options) { + function getDisplaySymbol(s) { + if (dispSymbols[s.key]) return dispSymbols[s.key]; + switch (s.symbolType) { + case "start": + dispSymbols[s.key] = new Start(diagram, s); + break; + + case "end": + dispSymbols[s.key] = new End(diagram, s); + break; + + case "operation": + dispSymbols[s.key] = new Operation(diagram, s); + break; + + case "inputoutput": + dispSymbols[s.key] = new InputOutput(diagram, s); + break; + + case "subroutine": + dispSymbols[s.key] = new Subroutine(diagram, s); + break; + + case "condition": + dispSymbols[s.key] = new Condition(diagram, s); + break; + + default: + return new Error("Wrong symbol type!"); + } + return dispSymbols[s.key]; + } + var self = this; + this.diagram && this.diagram.clean(); + var diagram = new FlowChart(container, options); + this.diagram = diagram; + var dispSymbols = {}; + !function constructChart(s, prevDisp, prev) { + var dispSymb = getDisplaySymbol(s); + return self.start === s ? diagram.startWith(dispSymb) : prevDisp && prev && !prevDisp.pathOk && (prevDisp instanceof Condition ? (prev.yes === s && prevDisp.yes(dispSymb), + prev.no === s && prevDisp.no(dispSymb)) : prevDisp.then(dispSymb)), dispSymb.pathOk ? dispSymb : (dispSymb instanceof Condition ? (s.yes && constructChart(s.yes, dispSymb, s), + s.no && constructChart(s.no, dispSymb, s)) : s.next && constructChart(s.next, dispSymb, s), + dispSymb); + }(this.start), diagram.render(); + }, + clean: function() { + this.diagram.clean(); + } + }, lines = [], prevBreak = 0, i0 = 1, i0len = input.length; i0len > i0; i0++) if ("\n" === input[i0] && "\\" !== input[i0 - 1]) { + var line0 = input.substring(prevBreak, i0); + prevBreak = i0 + 1, lines.push(line0.replace(/\\\n/g, "\n")); } - } - - if (dispSymb.pathOk) { - return dispSymb; - } - - if (dispSymb instanceof(Condition)) { - if (s.yes) { - constructChart(s.yes, dispSymb, s); + prevBreak < input.length && lines.push(input.substr(prevBreak)); + for (var l = 1, len = lines.length; len > l; ) { + var currentLine = lines[l]; + currentLine.indexOf("->") < 0 && currentLine.indexOf("=>") < 0 ? (lines[l - 1] += "\n" + currentLine, + lines.splice(l, 1), len--) : l++; } - if (s.no) { - constructChart(s.no, dispSymb, s); + for (;lines.length > 0; ) { + var line = lines.splice(0, 1)[0]; + if (line.indexOf("=>") >= 0) { + // definition + var sub, parts = line.split("=>"), symbol = { + key: parts[0], + symbolType: parts[1], + text: null, + link: null, + target: null, + flowstate: null + }; + /* adding support for links */ + if (symbol.symbolType.indexOf(": ") >= 0 && (sub = symbol.symbolType.split(": "), + symbol.symbolType = sub.shift(), symbol.text = sub.join(": ")), symbol.text && symbol.text.indexOf(":>") >= 0 ? (sub = symbol.text.split(":>"), + symbol.text = sub.shift(), symbol.link = sub.join(":>")) : symbol.symbolType.indexOf(":>") >= 0 && (sub = symbol.symbolType.split(":>"), + symbol.symbolType = sub.shift(), symbol.link = sub.join(":>")), symbol.symbolType.indexOf("\n") >= 0 && (symbol.symbolType = symbol.symbolType.split("\n")[0]), + symbol.link) { + var startIndex = symbol.link.indexOf("[") + 1, endIndex = symbol.link.indexOf("]"); + startIndex >= 0 && endIndex >= 0 && (symbol.target = symbol.link.substring(startIndex, endIndex), + symbol.link = symbol.link.substring(0, startIndex - 1)); + } + /* end of link support */ + /* adding support for flowstates */ + if (symbol.text && symbol.text.indexOf("|") >= 0) { + var txtAndState = symbol.text.split("|"); + symbol.flowstate = txtAndState.pop().trim(), symbol.text = txtAndState.join("|"); + } + /* end of flowstate support */ + chart.symbols[symbol.key] = symbol; + } else if (line.indexOf("->") >= 0) for (var flowSymbols = line.split("->"), i = 0, lenS = flowSymbols.length; lenS > i; i++) { + var flowSymb = flowSymbols[i], realSymb = getSymbol(flowSymb), next = getNextPath(flowSymb), direction = null; + if (next.indexOf(",") >= 0) { + var condOpt = next.split(","); + next = condOpt[0], direction = condOpt[1].trim(); + } + if (chart.start || (chart.start = realSymb), lenS > i + 1) { + var nextSymb = flowSymbols[i + 1]; + realSymb[next] = getSymbol(nextSymb), realSymb["direction_" + next] = direction, + direction = null; + } + } } - } else if (s.next) { - constructChart(s.next, dispSymb, s); - } - - return dispSymb; - })(this.start); - - diagram.render(); - }, - clean: function() { - this.diagram.clean(); - } - }; - - var lines = []; - var prevBreak = 0; - for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) { - if(input[i0] === '\n' && input[i0 - 1] !== '\\') { - var line0 = input.substring(prevBreak, i0); - prevBreak = i0 + 1; - lines.push(line0.replace(/\\\n/g, '\n')); - } - } - - if(prevBreak < input.length) { - lines.push(input.substr(prevBreak)); - } - - for (var l = 1, len = lines.length; l < len;) { - var currentLine = lines[l]; - - if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) { - lines[l - 1] += '\n' + currentLine; - lines.splice(l, 1); - len--; - } else { - l++; - } - } - - function getSymbol(s) { - var startIndex = s.indexOf('(') + 1; - var endIndex = s.indexOf(')'); - if (startIndex >= 0 && endIndex >= 0) { - return chart.symbols[s.substring(0, startIndex - 1)]; - } - return chart.symbols[s]; - } - - function getNextPath(s) { - var next = 'next'; - var startIndex = s.indexOf('(') + 1; - var endIndex = s.indexOf(')'); - if (startIndex >= 0 && endIndex >= 0) { - next = flowSymb.substring(startIndex, endIndex); - if (next.indexOf(',') < 0) { - if (next !== 'yes' && next !== 'no') { - next = 'next, ' + next; - } + return chart; } - } - return next; - } - - while (lines.length > 0) { - var line = lines.splice(0, 1)[0]; - - if (line.indexOf('=>') >= 0) { - // definition - var parts = line.split('=>'); - var symbol = { - key: parts[0], - symbolType: parts[1], - text: null, - link: null, - target: null, - flowstate: null + var FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6), Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12), End = __webpack_require__(/*! ./flowchart.symbol.end */ 9), Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11), InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10), Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13), Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5); + module.exports = parse; + }, /* 5 */ + /*!*******************************************!*\ + !*** ./src/flowchart.symbol.condition.js ***! + \*******************************************/ + /***/ + function(module, exports, __webpack_require__) { + function Condition(chart, options) { + options = options || {}, Symbol.call(this, chart, options), this.textMargin = this.getAttr("text-margin"), + this.yes_direction = "bottom", this.no_direction = "right", options.yes && options.direction_yes && options.no && !options.direction_no ? "right" === options.direction_yes ? (this.no_direction = "bottom", + this.yes_direction = "right") : (this.no_direction = "right", this.yes_direction = "bottom") : options.yes && !options.direction_yes && options.no && options.direction_no ? "right" === options.direction_no ? (this.yes_direction = "bottom", + this.no_direction = "right") : (this.yes_direction = "right", this.no_direction = "bottom") : (this.yes_direction = "bottom", + this.no_direction = "right"), this.yes_direction = this.yes_direction || "bottom", + this.no_direction = this.no_direction || "right", this.text.attr({ + x: 2 * this.textMargin + }); + var width = this.text.getBBox().width + 3 * this.textMargin; + width += width / 2; + var height = this.text.getBBox().height + 2 * this.textMargin; + height += height / 2, height = Math.max(.5 * width, height); + var startX = width / 4, startY = height / 4; + this.text.attr({ + x: startX + this.textMargin / 2 + }); + var start = { + x: startX, + y: startY + }, points = [ { + x: startX - width / 4, + y: startY + height / 4 + }, { + x: startX - width / 4 + width / 2, + y: startY + height / 4 + height / 2 + }, { + x: startX - width / 4 + width, + y: startY + height / 4 + }, { + x: startX - width / 4 + width / 2, + y: startY + height / 4 - height / 2 + }, { + x: startX - width / 4, + y: startY + height / 4 + } ], symbol = drawPath(chart, start, points); + symbol.attr({ + stroke: this.getAttr("element-color"), + "stroke-width": this.getAttr("line-width"), + fill: this.getAttr("fill") + }), options.link && symbol.attr("href", options.link), options.target && symbol.attr("target", options.target), + options.key && (symbol.node.id = options.key), symbol.node.setAttribute("class", this.getAttr("class")), + this.text.attr({ + y: symbol.getBBox().height / 2 + }), this.group.push(symbol), symbol.insertBefore(this.text), this.initialize(); + } + var Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2), inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits, drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3), drawPath = drawAPI.drawPath; + inherits(Condition, Symbol), Condition.prototype.render = function() { + this.yes_direction && (this[this.yes_direction + "_symbol"] = this.yes_symbol), + this.no_direction && (this[this.no_direction + "_symbol"] = this.no_symbol); + var lineLength = this.getAttr("line-length"); + if (this.bottom_symbol) { + var bottomPoint = this.getBottom(); + this.bottom_symbol.isPositioned || (this.bottom_symbol.shiftY(this.getY() + this.height + lineLength), + this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2), this.bottom_symbol.isPositioned = !0, + this.bottom_symbol.render()); + } + if (this.right_symbol) { + var rightPoint = this.getRight(); + if (!this.right_symbol.isPositioned) { + this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2), this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength); + var self = this; + !function shift() { + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; len > i; i++) { + symb = self.chart.symbols[i]; + var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); + if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) { + hasSymbolUnder = !0; + break; + } + } + hasSymbolUnder && (self.right_symbol.setX(symb.getX() + symb.width + lineLength), + shift()); + }(), this.right_symbol.isPositioned = !0, this.right_symbol.render(); + } + } + }, Condition.prototype.renderLines = function() { + this.yes_symbol && this.drawLineTo(this.yes_symbol, this.getAttr("yes-text"), this.yes_direction), + this.no_symbol && this.drawLineTo(this.no_symbol, this.getAttr("no-text"), this.no_direction); + }, module.exports = Condition; + }, /* 6 */ + /*!********************************!*\ + !*** ./src/flowchart.chart.js ***! + \********************************/ + /***/ + function(module, exports, __webpack_require__) { + function FlowChart(container, options) { + options = options || {}, this.paper = new Raphael(container), this.options = defaults(options, defaultOptions), + this.symbols = [], this.lines = [], this.start = null; + } + var Raphael = __webpack_require__(/*! raphael */ 15), defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults, defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7), Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5); + FlowChart.prototype.handle = function(symbol) { + this.symbols.indexOf(symbol) <= -1 && this.symbols.push(symbol); + var flowChart = this; + return symbol instanceof Condition ? (symbol.yes = function(nextSymbol) { + return symbol.yes_symbol = nextSymbol, symbol.no_symbol && (symbol.pathOk = !0), + flowChart.handle(nextSymbol); + }, symbol.no = function(nextSymbol) { + return symbol.no_symbol = nextSymbol, symbol.yes_symbol && (symbol.pathOk = !0), + flowChart.handle(nextSymbol); + }) : symbol.then = function(nextSymbol) { + return symbol.next = nextSymbol, symbol.pathOk = !0, flowChart.handle(nextSymbol); + }, symbol; + }, FlowChart.prototype.startWith = function(symbol) { + return this.start = symbol, this.handle(symbol); + }, FlowChart.prototype.render = function() { + var symbol, maxWidth = 0, maxHeight = 0, i = 0, len = 0, maxX = 0, maxY = 0; + for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.width > maxWidth && (maxWidth = symbol.width), + symbol.height > maxHeight && (maxHeight = symbol.height); + for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.shiftX(this.options.x + (maxWidth - symbol.width) / 2 + this.options["line-width"]), + symbol.shiftY(this.options.y + (maxHeight - symbol.height) / 2 + this.options["line-width"]); + // for (i = 0, len = this.symbols.length; i < len; i++) { + // symbol = this.symbols[i]; + // symbol.render(); + // } + for (this.start.render(), i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], + symbol.renderLines(); + for (maxX = this.maxXFromLine, i = 0, len = this.symbols.length; len > i; i++) { + symbol = this.symbols[i]; + var x = symbol.getX() + symbol.width, y = symbol.getY() + symbol.height; + x > maxX && (maxX = x), y > maxY && (maxY = y); + } + var scale = this.options.scale, lineWidth = this.options["line-width"]; + this.paper.setSize(maxX * scale + lineWidth * scale, maxY * scale + lineWidth * scale), + this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, !0); + }, FlowChart.prototype.clean = function() { + if (this.paper) { + var paperDom = this.paper.canvas; + paperDom.parentNode.removeChild(paperDom); + } + }, module.exports = FlowChart; + }, /* 7 */ + /*!***********************************!*\ + !*** ./src/flowchart.defaults.js ***! + \***********************************/ + /***/ + function(module, exports) { + // defaults + module.exports = { + x: 0, + y: 0, + "line-width": 3, + "line-length": 50, + "text-margin": 10, + "font-size": 14, + "font-color": "black", + // 'font': 'normal', + // 'font-family': 'calibri', + // 'font-weight': 'normal', + "line-color": "black", + "element-color": "black", + fill: "white", + "yes-text": "yes", + "no-text": "no", + "arrow-end": "block", + "class": "flowchart", + scale: 1, + symbols: { + start: {}, + end: {}, + condition: {}, + inputoutput: {}, + operation: {}, + subroutine: {} + } }; - - var sub; - - if (symbol.symbolType.indexOf(': ') >= 0) { - sub = symbol.symbolType.split(': '); - symbol.symbolType = sub.shift(); - symbol.text = sub.join(': '); + }, /* 8 */ + /*!*******************************!*\ + !*** ./src/flowchart.shim.js ***! + \*******************************/ + /***/ + function(module, exports) { + // add indexOf to non ECMA-262 standard compliant browsers + Array.prototype.indexOf || (Array.prototype.indexOf = function(searchElement) { + "use strict"; + if (null === this) throw new TypeError(); + var t = Object(this), len = t.length >>> 0; + if (0 === len) return -1; + var n = 0; + if (arguments.length > 0 && (n = Number(arguments[1]), n != n ? n = 0 : 0 !== n && n != 1 / 0 && n != -(1 / 0) && (n = (n > 0 || -1) * Math.floor(Math.abs(n)))), + n >= len) return -1; + for (var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); len > k; k++) if (k in t && t[k] === searchElement) return k; + return -1; + }), // add lastIndexOf to non ECMA-262 standard compliant browsers + Array.prototype.lastIndexOf || (Array.prototype.lastIndexOf = function(searchElement) { + "use strict"; + if (null === this) throw new TypeError(); + var t = Object(this), len = t.length >>> 0; + if (0 === len) return -1; + var n = len; + arguments.length > 1 && (n = Number(arguments[1]), n != n ? n = 0 : 0 !== n && n != 1 / 0 && n != -(1 / 0) && (n = (n > 0 || -1) * Math.floor(Math.abs(n)))); + for (var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n); k >= 0; k--) if (k in t && t[k] === searchElement) return k; + return -1; + }), String.prototype.trim || (String.prototype.trim = function() { + return this.replace(/^\s+|\s+$/g, ""); + }); + }, /* 9 */ + /*!*************************************!*\ + !*** ./src/flowchart.symbol.end.js ***! + \*************************************/ + /***/ + function(module, exports, __webpack_require__) { + function End(chart, options) { + var symbol = chart.paper.rect(0, 0, 0, 0, 20); + options = options || {}, options.text = options.text || "End", Symbol.call(this, chart, options, symbol); } - - if (symbol.text && symbol.text.indexOf(':>') >= 0) { - sub = symbol.text.split(':>'); - symbol.text = sub.shift(); - symbol.link = sub.join(':>'); - } else if (symbol.symbolType.indexOf(':>') >= 0) { - sub = symbol.symbolType.split(':>'); - symbol.symbolType = sub.shift(); - symbol.link = sub.join(':>'); + var Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2), inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits; + inherits(End, Symbol), module.exports = End; + }, /* 10 */ + /*!*********************************************!*\ + !*** ./src/flowchart.symbol.inputoutput.js ***! + \*********************************************/ + /***/ + function(module, exports, __webpack_require__) { + function InputOutput(chart, options) { + options = options || {}, Symbol.call(this, chart, options), this.textMargin = this.getAttr("text-margin"), + this.text.attr({ + x: 3 * this.textMargin + }); + var width = this.text.getBBox().width + 4 * this.textMargin, height = this.text.getBBox().height + 2 * this.textMargin, startX = this.textMargin, startY = height / 2, start = { + x: startX, + y: startY + }, points = [ { + x: startX - this.textMargin, + y: height + }, { + x: startX - this.textMargin + width, + y: height + }, { + x: startX - this.textMargin + width + 2 * this.textMargin, + y: 0 + }, { + x: startX - this.textMargin + 2 * this.textMargin, + y: 0 + }, { + x: startX, + y: startY + } ], symbol = drawPath(chart, start, points); + symbol.attr({ + stroke: this.getAttr("element-color"), + "stroke-width": this.getAttr("line-width"), + fill: this.getAttr("fill") + }), options.link && symbol.attr("href", options.link), options.target && symbol.attr("target", options.target), + options.key && (symbol.node.id = options.key), symbol.node.setAttribute("class", this.getAttr("class")), + this.text.attr({ + y: symbol.getBBox().height / 2 + }), this.group.push(symbol), symbol.insertBefore(this.text), this.initialize(); } - - if (symbol.symbolType.indexOf('\n') >= 0) { - symbol.symbolType = symbol.symbolType.split('\n')[0]; + var Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2), inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits, drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3), drawPath = drawAPI.drawPath; + inherits(InputOutput, Symbol), InputOutput.prototype.getLeft = function() { + var y = this.getY() + this.group.getBBox().height / 2, x = this.getX() + this.textMargin; + return { + x: x, + y: y + }; + }, InputOutput.prototype.getRight = function() { + var y = this.getY() + this.group.getBBox().height / 2, x = this.getX() + this.group.getBBox().width - this.textMargin; + return { + x: x, + y: y + }; + }, module.exports = InputOutput; + }, /* 11 */ + /*!*******************************************!*\ + !*** ./src/flowchart.symbol.operation.js ***! + \*******************************************/ + /***/ + function(module, exports, __webpack_require__) { + function Operation(chart, options) { + var symbol = chart.paper.rect(0, 0, 0, 0); + options = options || {}, Symbol.call(this, chart, options, symbol); } - - /* adding support for links */ - if (symbol.link) { - var startIndex = symbol.link.indexOf('[') + 1; - var endIndex = symbol.link.indexOf(']'); - if (startIndex >= 0 && endIndex >= 0) { - symbol.target = symbol.link.substring(startIndex, endIndex); - symbol.link = symbol.link.substring(0, startIndex - 1); - } + var Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2), inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits; + inherits(Operation, Symbol), module.exports = Operation; + }, /* 12 */ + /*!***************************************!*\ + !*** ./src/flowchart.symbol.start.js ***! + \***************************************/ + /***/ + function(module, exports, __webpack_require__) { + function Start(chart, options) { + var symbol = chart.paper.rect(0, 0, 0, 0, 20); + options = options || {}, options.text = options.text || "Start", Symbol.call(this, chart, options, symbol); } - /* end of link support */ - - /* adding support for flowstates */ - if (symbol.text) { - if (symbol.text.indexOf('|') >= 0) { - var txtAndState = symbol.text.split('|'); - symbol.flowstate = txtAndState.pop().trim(); - symbol.text = txtAndState.join('|'); - } + var Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2), inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits; + inherits(Start, Symbol), module.exports = Start; + }, /* 13 */ + /*!********************************************!*\ + !*** ./src/flowchart.symbol.subroutine.js ***! + \********************************************/ + /***/ + function(module, exports, __webpack_require__) { + function Subroutine(chart, options) { + var symbol = chart.paper.rect(0, 0, 0, 0); + options = options || {}, Symbol.call(this, chart, options, symbol), symbol.attr({ + width: this.text.getBBox().width + 4 * this.getAttr("text-margin") + }), this.text.attr({ + x: 2 * this.getAttr("text-margin") + }); + var innerWrap = chart.paper.rect(0, 0, 0, 0); + innerWrap.attr({ + x: this.getAttr("text-margin"), + stroke: this.getAttr("element-color"), + "stroke-width": this.getAttr("line-width"), + width: this.text.getBBox().width + 2 * this.getAttr("text-margin"), + height: this.text.getBBox().height + 2 * this.getAttr("text-margin"), + fill: this.getAttr("fill") + }), options.key && (innerWrap.node.id = options.key + "i"); + var font = this.getAttr("font"), fontF = this.getAttr("font-family"), fontW = this.getAttr("font-weight"); + font && innerWrap.attr({ + font: font + }), fontF && innerWrap.attr({ + "font-family": fontF + }), fontW && innerWrap.attr({ + "font-weight": fontW + }), options.link && innerWrap.attr("href", options.link), options.target && innerWrap.attr("target", options.target), + this.group.push(innerWrap), innerWrap.insertBefore(this.text), this.initialize(); } - /* end of flowstate support */ - - chart.symbols[symbol.key] = symbol; - - } else if (line.indexOf('->') >= 0) { - // flow - var flowSymbols = line.split('->'); - for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) { - var flowSymb = flowSymbols[i]; - - var realSymb = getSymbol(flowSymb); - var next = getNextPath(flowSymb); - - var direction = null; - if (next.indexOf(',') >= 0) { - var condOpt = next.split(','); - next = condOpt[0]; - direction = condOpt[1].trim(); - } - - if (!chart.start) { - chart.start = realSymb; - } - - if (i + 1 < lenS) { - var nextSymb = flowSymbols[i + 1]; - realSymb[next] = getSymbol(nextSymb); - realSymb['direction_' + next] = direction; - direction = null; - } + var Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2), inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits; + inherits(Subroutine, Symbol), module.exports = Subroutine; + }, /* 14 */ + /*!******************************!*\ + !*** ./src/jquery-plugin.js ***! + \******************************/ + /***/ + function(module, exports, __webpack_require__) { + if ("undefined" != typeof jQuery) { + var parse = __webpack_require__(/*! ./flowchart.parse */ 4); + !function($) { + $.fn.flowChart = function(options) { + return this.each(function() { + var $this = $(this), chart = parse($this.text()); + $this.html(""), chart.drawSVG(this, options); + }); + }; + }(jQuery); } - } - - } - return chart; - } - // public api interface - flowchart.parse = parse; - -})(); \ No newline at end of file + }, /* 15 */ + /*!**************************!*\ + !*** external "Raphael" ***! + \**************************/ + /***/ + function(module, exports) { + module.exports = __WEBPACK_EXTERNAL_MODULE_15__; + } ]); +}); +//# sourceMappingURL=flowchart.js.map \ No newline at end of file diff --git a/release/flowchart.js.map b/release/flowchart.js.map new file mode 100644 index 00000000..a929c3e0 --- /dev/null +++ b/release/flowchart.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 30f32d336fe3b803c43a","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","// flowchart, v1.4.2\n// Copyright (c)yyyy Adriano Raiano (adrai).\n// Distributed under MIT license\n// http://adrai.github.io/flowchart.js\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.FlowChart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0];\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t symbol;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n\t this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})( jQuery ); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 30f32d336fe3b803c43a\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.FlowChart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n symbol;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})( jQuery ); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index e10004ad..1912f913 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,7 +1,2 @@ -// flowchart, v1.4.2 -// Copyright (c)2015 Adriano Raiano (adrai). -// Distributed under MIT license -// http://adrai.github.io/flowchart.js - -!function(){function a(b,c){if(!b||"function"==typeof b)return c;var d={};for(var e in c)d[e]=c[e];for(e in b)b[e]&&("object"==typeof d[e]?d[e]=a(d[e],b[e]):d[e]=b[e]);return d}function b(a,b){if("function"==typeof Object.create)a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}});else{a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}}function c(a,b,c){var d,e,f="M{0},{1}";for(d=2,e=2*c.length+2;e>d;d+=2)f+=" L{"+d+"},{"+(d+1)+"}";var g=[b.x,b.y];for(d=0,e=c.length;e>d;d++)g.push(c[d].x),g.push(c[d].y);var h=a.paper.path(f,g);h.attr("stroke",a.options["element-color"]),h.attr("stroke-width",a.options["line-width"]);var i=a.options.font,j=a.options["font-family"],k=a.options["font-weight"];return i&&h.attr({font:i}),j&&h.attr({"font-family":j}),k&&h.attr({"font-weight":k}),h}function d(a,b,c,d){var e,f;"[object Array]"!==Object.prototype.toString.call(c)&&(c=[c]);var g="M{0},{1}";for(e=2,f=2*c.length+2;f>e;e+=2)g+=" L{"+e+"},{"+(e+1)+"}";var h=[b.x,b.y];for(e=0,f=c.length;f>e;e++)h.push(c[e].x),h.push(c[e].y);var i=a.paper.path(g,h);i.attr({stroke:a.options["line-color"],"stroke-width":a.options["line-width"],"arrow-end":a.options["arrow-end"]});var j=a.options.font,k=a.options["font-family"],l=a.options["font-weight"];if(j&&i.attr({font:j}),k&&i.attr({"font-family":k}),l&&i.attr({"font-weight":l}),d){var m=!1,n=a.paper.text(0,0,d),o=!1,p=c[0];b.y===p.y&&(o=!0);var q=0,r=0;m?(q=b.x>p.x?b.x-(b.x-p.x)/2:p.x-(p.x-b.x)/2,r=b.y>p.y?b.y-(b.y-p.y)/2:p.y-(p.y-b.y)/2,o?(q-=n.getBBox().width/2,r-=a.options["text-margin"]):(q+=a.options["text-margin"],r-=n.getBBox().height/2)):(q=b.x,r=b.y,o?(q+=a.options["text-margin"]/2,r-=a.options["text-margin"]):(q+=a.options["text-margin"]/2,r+=a.options["text-margin"])),n.attr({"text-anchor":"start","font-size":a.options["font-size"],fill:a.options["font-color"],x:q,y:r}),j&&n.attr({font:j}),k&&n.attr({"font-family":k}),l&&n.attr({"font-weight":l})}return i}function e(a,b,c,d,e,f,g,h){var i,j,k,l,m,n={x:null,y:null,onLine1:!1,onLine2:!1};return i=(h-f)*(c-a)-(g-e)*(d-b),0===i?n:(j=b-f,k=a-e,l=(g-e)*j-(h-f)*k,m=(c-a)*j-(d-b)*k,j=l/i,k=m/i,n.x=a+j*(c-a),n.y=b+j*(d-b),j>0&&1>j&&(n.onLine1=!0),k>0&&1>k&&(n.onLine2=!0),n)}function f(a,b){b=b||{},this.paper=new Raphael(a),this.options=r.defaults(b,q),this.symbols=[],this.lines=[],this.start=null}function g(a,b,c){this.chart=a,this.group=this.chart.paper.set(),this.symbol=c,this.connectedTo=[],this.symbolType=b.symbolType,this.flowstate=b.flowstate||"future",this.next_direction=b.next&&b.direction_next?b.direction_next:void 0,this.text=this.chart.paper.text(0,0,b.text),b.key&&(this.text.node.id=b.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var d=this.getAttr("font"),e=this.getAttr("font-family"),f=this.getAttr("font-weight");d&&this.text.attr({font:d}),e&&this.text.attr({"font-family":e}),f&&this.text.attr({"font-weight":f}),b.link&&this.text.attr("href",b.link),b.target&&this.text.attr("target",b.target);var g=this.getAttr("maxWidth");if(g){for(var h=b.text.split(" "),i="",j=0,k=h.length;k>j;j++){var l=h[j];this.text.attr("text",i+" "+l),i+=this.text.getBBox().width>g?"\n"+l:" "+l}this.text.attr("text",i.substring(1))}if(this.group.push(this.text),c){var m=this.getAttr("text-margin");c.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*m,height:this.text.getBBox().height+2*m}),c.node.setAttribute("class",this.getAttr("class")),b.link&&c.attr("href",b.link),b.target&&c.attr("target",b.target),b.key&&(c.node.id=b.key),this.group.push(c),c.insertBefore(this.text),this.text.attr({y:c.getBBox().height/2}),this.initialize()}}function h(a,b){var c=a.paper.rect(0,0,0,0,20);b=b||{},b.text=b.text||"Start",g.call(this,a,b,c)}function i(a,b){var c=a.paper.rect(0,0,0,0,20);b=b||{},b.text=b.text||"End",g.call(this,a,b,c)}function j(a,b){var c=a.paper.rect(0,0,0,0);b=b||{},g.call(this,a,b,c)}function k(a,b){var c=a.paper.rect(0,0,0,0);b=b||{},g.call(this,a,b,c),c.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var d=a.paper.rect(0,0,0,0);d.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),b.key&&(d.node.id=b.key+"i");var e=this.getAttr("font"),f=this.getAttr("font-family"),h=this.getAttr("font-weight");e&&d.attr({font:e}),f&&d.attr({"font-family":f}),h&&d.attr({"font-weight":h}),b.link&&d.attr("href",b.link),b.target&&d.attr("target",b.target),this.group.push(d),d.insertBefore(this.text),this.initialize()}function l(a,b){b=b||{},g.call(this,a,b),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var d=this.text.getBBox().width+4*this.textMargin,e=this.text.getBBox().height+2*this.textMargin,f=this.textMargin,h=e/2,i={x:f,y:h},j=[{x:f-this.textMargin,y:e},{x:f-this.textMargin+d,y:e},{x:f-this.textMargin+d+2*this.textMargin,y:0},{x:f-this.textMargin+2*this.textMargin,y:0},{x:f,y:h}],k=c(a,i,j);k.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),b.link&&k.attr("href",b.link),b.target&&k.attr("target",b.target),b.key&&(k.node.id=b.key),k.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:k.getBBox().height/2}),this.group.push(k),k.insertBefore(this.text),this.initialize()}function m(a,b){b=b||{},g.call(this,a,b),this.textMargin=this.getAttr("text-margin"),this.yes_direction="bottom",this.no_direction="right",b.yes&&b.direction_yes&&b.no&&!b.direction_no?"right"===b.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):(this.no_direction="right",this.yes_direction="bottom"):b.yes&&!b.direction_yes&&b.no&&b.direction_no?"right"===b.direction_no?(this.yes_direction="bottom",this.no_direction="right"):(this.yes_direction="right",this.no_direction="bottom"):(this.yes_direction="bottom",this.no_direction="right"),this.yes_direction=this.yes_direction||"bottom",this.no_direction=this.no_direction||"right",this.text.attr({x:2*this.textMargin});var d=this.text.getBBox().width+3*this.textMargin;d+=d/2;var e=this.text.getBBox().height+2*this.textMargin;e+=e/2,e=Math.max(.5*d,e);var f=d/4,h=e/4;this.text.attr({x:f+this.textMargin/2});var i={x:f,y:h},j=[{x:f-d/4,y:h+e/4},{x:f-d/4+d/2,y:h+e/4+e/2},{x:f-d/4+d,y:h+e/4},{x:f-d/4+d/2,y:h+e/4-e/2},{x:f-d/4,y:h+e/4}],k=c(a,i,j);k.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),b.link&&k.attr("href",b.link),b.target&&k.attr("target",b.target),b.key&&(k.node.id=b.key),k.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:k.getBBox().height/2}),this.group.push(k),k.insertBefore(this.text),this.initialize()}function n(a){function b(a){var b=a.indexOf("(")+1,c=a.indexOf(")");return b>=0&&c>=0?d.symbols[a.substring(0,b-1)]:d.symbols[a]}function c(a){var b="next",c=a.indexOf("(")+1,d=a.indexOf(")");return c>=0&&d>=0&&(b=D.substring(c,d),b.indexOf(",")<0&&"yes"!==b&&"no"!==b&&(b="next, "+b)),b}a=a||"",a=a.trim();for(var d={symbols:{},start:null,drawSVG:function(a,b){function c(a){if(g[a.key])return g[a.key];switch(a.symbolType){case"start":g[a.key]=new h(e,a);break;case"end":g[a.key]=new i(e,a);break;case"operation":g[a.key]=new j(e,a);break;case"inputoutput":g[a.key]=new l(e,a);break;case"subroutine":g[a.key]=new k(e,a);break;case"condition":g[a.key]=new m(e,a);break;default:return new Error("Wrong symbol type!")}return g[a.key]}var d=this;this.diagram&&this.diagram.clean();var e=new f(a,b);this.diagram=e;var g={};!function n(a,b,f){var g=c(a);return d.start===a?e.startWith(g):b&&f&&!b.pathOk&&(b instanceof m?(f.yes===a&&b.yes(g),f.no===a&&b.no(g)):b.then(g)),g.pathOk?g:(g instanceof m?(a.yes&&n(a.yes,g,a),a.no&&n(a.no,g,a)):a.next&&n(a.next,g,a),g)}(this.start),e.render()},clean:function(){this.diagram.clean()}},e=[],g=0,n=1,o=a.length;o>n;n++)if("\n"===a[n]&&"\\"!==a[n-1]){var p=a.substring(g,n);g=n+1,e.push(p.replace(/\\\n/g,"\n"))}gq;){var s=e[q];s.indexOf("->")<0&&s.indexOf("=>")<0?(e[q-1]+="\n"+s,e.splice(q,1),r--):q++}for(;e.length>0;){var t=e.splice(0,1)[0];if(t.indexOf("=>")>=0){var u,v=t.split("=>"),w={key:v[0],symbolType:v[1],text:null,link:null,target:null,flowstate:null};if(w.symbolType.indexOf(": ")>=0&&(u=w.symbolType.split(": "),w.symbolType=u.shift(),w.text=u.join(": ")),w.text&&w.text.indexOf(":>")>=0?(u=w.text.split(":>"),w.text=u.shift(),w.link=u.join(":>")):w.symbolType.indexOf(":>")>=0&&(u=w.symbolType.split(":>"),w.symbolType=u.shift(),w.link=u.join(":>")),w.symbolType.indexOf("\n")>=0&&(w.symbolType=w.symbolType.split("\n")[0]),w.link){var x=w.link.indexOf("[")+1,y=w.link.indexOf("]");x>=0&&y>=0&&(w.target=w.link.substring(x,y),w.link=w.link.substring(0,x-1))}if(w.text&&w.text.indexOf("|")>=0){var z=w.text.split("|");w.flowstate=z.pop().trim(),w.text=z.join("|")}d.symbols[w.key]=w}else if(t.indexOf("->")>=0)for(var A=t.split("->"),B=0,C=A.length;C>B;B++){var D=A[B],E=b(D),F=c(D),G=null;if(F.indexOf(",")>=0){var H=F.split(",");F=H[0],G=H[1].trim()}if(d.start||(d.start=E),C>B+1){var I=A[B+1];E[F]=b(I),E["direction_"+F]=G,G=null}}}return d}Array.prototype.indexOf||(Array.prototype.indexOf=function(a){"use strict";if(null===this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=0;if(arguments.length>0&&(d=Number(arguments[1]),d!=d?d=0:0!==d&&d!=1/0&&d!=-(1/0)&&(d=(d>0||-1)*Math.floor(Math.abs(d)))),d>=c)return-1;for(var e=d>=0?d:Math.max(c-Math.abs(d),0);c>e;e++)if(e in b&&b[e]===a)return e;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(a){"use strict";if(null===this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=c;arguments.length>1&&(d=Number(arguments[1]),d!=d?d=0:0!==d&&d!=1/0&&d!=-(1/0)&&(d=(d>0||-1)*Math.floor(Math.abs(d))));for(var e=d>=0?Math.min(d,c-1):c-Math.abs(d);e>=0;e--)if(e in b&&b[e]===a)return e;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")});var o=this,p={};"undefined"!=typeof module&&module.exports?module.exports=p:o.flowchart=o.flowchart||p;var q={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}},r={defaults:a,inherits:b};f.prototype.handle=function(a){this.symbols.indexOf(a)<=-1&&this.symbols.push(a);var b=this;return a instanceof m?(a.yes=function(c){return a.yes_symbol=c,a.no_symbol&&(a.pathOk=!0),b.handle(c)},a.no=function(c){return a.no_symbol=c,a.yes_symbol&&(a.pathOk=!0),b.handle(c)}):a.then=function(c){return a.next=c,a.pathOk=!0,b.handle(c)},a},f.prototype.startWith=function(a){return this.start=a,this.handle(a)},f.prototype.render=function(){var a,b=0,c=0,d=0,e=0,f=0,g=0;for(d=0,e=this.symbols.length;e>d;d++)a=this.symbols[d],a.width>b&&(b=a.width),a.height>c&&(c=a.height);for(d=0,e=this.symbols.length;e>d;d++)a=this.symbols[d],a.shiftX(this.options.x+(b-a.width)/2+this.options["line-width"]),a.shiftY(this.options.y+(c-a.height)/2+this.options["line-width"]);for(this.start.render(),d=0,e=this.symbols.length;e>d;d++)a=this.symbols[d],a.renderLines();for(f=this.maxXFromLine,d=0,e=this.symbols.length;e>d;d++){a=this.symbols[d];var h=a.getX()+a.width,i=a.getY()+a.height;h>f&&(f=h),i>g&&(g=i)}var j=this.options.scale,k=this.options["line-width"];this.paper.setSize(f*j+k*j,g*j+k*j),this.paper.setViewBox(0,0,f+k,g+k,!0)},f.prototype.clean=function(){if(this.paper){var a=this.paper.canvas;a.parentNode.removeChild(a)}},g.prototype.getAttr=function(a){if(!this.chart)return void 0;var b,c=this.chart.options?this.chart.options[a]:void 0,d=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][a]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(b=this.chart.options.flowstate[this.flowstate][a]),b||d||c},g.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},g.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},g.prototype.getX=function(){return this.group.getBBox().x},g.prototype.getY=function(){return this.group.getBBox().y},g.prototype.shiftX=function(a){this.group.transform("t"+(this.getX()+a)+","+this.getY())},g.prototype.setX=function(a){this.group.transform("t"+a+","+this.getY())},g.prototype.shiftY=function(a){this.group.transform("t"+this.getX()+","+(this.getY()+a))},g.prototype.setY=function(a){this.group.transform("t"+this.getX()+","+a)},g.prototype.getTop=function(){var a=this.getY(),b=this.getX()+this.width/2;return{x:b,y:a}},g.prototype.getBottom=function(){var a=this.getY()+this.height,b=this.getX()+this.width/2;return{x:b,y:a}},g.prototype.getLeft=function(){var a=this.getY()+this.group.getBBox().height/2,b=this.getX();return{x:b,y:a}},g.prototype.getRight=function(){var a=this.getY()+this.group.getBBox().height/2,b=this.getX()+this.group.getBBox().width;return{x:b,y:a}},g.prototype.render=function(){if(this.next){var a=this.getAttr("line-length");if("right"===this.next_direction){var b=this.getRight();this.next.getLeft();if(!this.next.isPositioned){this.next.setY(b.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+a);var c=this;!function e(){for(var b,d=!1,f=0,g=c.chart.symbols.length;g>f;f++){b=c.chart.symbols[f];var h=Math.abs(b.getCenter().x-c.next.getCenter().x);if(b.getCenter().y>c.next.getCenter().y&&h<=c.next.width/2){d=!0;break}}d&&(c.next.setX(b.getX()+b.width+a),e())}(),this.next.isPositioned=!0,this.next.render()}}else{var d=this.getBottom();this.next.getTop();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+a),this.next.setX(d.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},g.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,"",this.next_direction):this.drawLineTo(this.next))},g.prototype.drawLineTo=function(a,b,c){this.connectedTo.indexOf(a)<0&&this.connectedTo.push(a);var f,g=this.getCenter().x,h=this.getCenter().y,i=(this.getTop(),this.getRight()),j=this.getBottom(),k=this.getLeft(),l=a.getCenter().x,m=a.getCenter().y,n=a.getTop(),o=a.getRight(),p=(a.getBottom(),a.getLeft()),q=g===l,r=h===m,s=m>h,t=h>m,u=g>l,v=l>g,w=0,x=this.getAttr("line-length"),y=this.getAttr("line-width");if(c&&"bottom"!==c||!q||!s)if(c&&"right"!==c||!r||!v)if(c&&"left"!==c||!r||!u)if(c&&"right"!==c||!q||!t)if(c&&"right"!==c||!q||!s)if(c&&"bottom"!==c||!u)if(c&&"bottom"!==c||!v)if(c&&"right"===c&&u)f=d(this.chart,i,[{x:i.x+x/2,y:i.y},{x:i.x+x/2,y:n.y-x/2},{x:n.x,y:n.y-x/2},{x:n.x,y:n.y}],b),this.rightStart=!0,a.topEnd=!0,w=i.x+x/2;else if(c&&"right"===c&&v)f=d(this.chart,i,[{x:n.x,y:i.y},{x:n.x,y:n.y}],b),this.rightStart=!0,a.topEnd=!0,w=i.x+x/2;else if(c&&"bottom"===c&&q&&t)f=d(this.chart,j,[{x:j.x,y:j.y+x/2},{x:i.x+x/2,y:j.y+x/2},{x:i.x+x/2,y:n.y-x/2},{x:n.x,y:n.y-x/2},{x:n.x,y:n.y}],b),this.bottomStart=!0,a.topEnd=!0,w=j.x+x/2;else if("left"===c&&q&&t){var z=k.x-x/2;p.xA;A++)for(var C,D=this.chart.lines[A],E=D.attr("path"),F=f.attr("path"),G=0,H=E.length-1;H>G;G++){var I=[];I.push(["M",E[G][1],E[G][2]]),I.push(["L",E[G+1][1],E[G+1][2]]);for(var J=I[0][1],K=I[0][2],L=I[1][1],M=I[1][2],N=0,O=F.length-1;O>N;N++){var P=[];P.push(["M",F[N][1],F[N][2]]),P.push(["L",F[N+1][1],F[N+1][2]]);var Q=P[0][1],R=P[0][2],S=P[1][1],T=P[1][2],U=e(J,K,L,M,Q,R,S,T);if(U.onLine1&&U.onLine2){var V;R===T?Q>S?(V=["L",U.x+2*y,R],F.splice(N+1,0,V),V=["C",U.x+2*y,R,U.x,R-4*y,U.x-2*y,R],F.splice(N+2,0,V),f.attr("path",F)):(V=["L",U.x-2*y,R],F.splice(N+1,0,V),V=["C",U.x-2*y,R,U.x,R-4*y,U.x+2*y,R],F.splice(N+2,0,V),f.attr("path",F)):R>T?(V=["L",Q,U.y+2*y],F.splice(N+1,0,V),V=["C",Q,U.y+2*y,Q+4*y,U.y,Q,U.y-2*y],F.splice(N+2,0,V),f.attr("path",F)):(V=["L",Q,U.y-2*y],F.splice(N+1,0,V),V=["C",Q,U.y-2*y,Q+4*y,U.y,Q,U.y+2*y],F.splice(N+2,0,V),f.attr("path",F)),N+=2,C+=2}}}this.chart.lines.push(f)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&w>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=w)},r.inherits(h,g),r.inherits(i,g),r.inherits(j,g),r.inherits(k,g),r.inherits(l,g),l.prototype.getLeft=function(){var a=this.getY()+this.group.getBBox().height/2,b=this.getX()+this.textMargin;return{x:b,y:a}},l.prototype.getRight=function(){var a=this.getY()+this.group.getBBox().height/2,b=this.getX()+this.group.getBBox().width-this.textMargin;return{x:b,y:a}},r.inherits(m,g),m.prototype.render=function(){this.yes_direction&&(this[this.yes_direction+"_symbol"]=this.yes_symbol),this.no_direction&&(this[this.no_direction+"_symbol"]=this.no_symbol);var a=this.getAttr("line-length");if(this.bottom_symbol){var b=this.getBottom();this.bottom_symbol.getTop();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+a),this.bottom_symbol.setX(b.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.right_symbol){var c=this.getRight();this.right_symbol.getLeft();if(!this.right_symbol.isPositioned){this.right_symbol.setY(c.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+a);var d=this;!function e(){for(var b,c=!1,f=0,g=d.chart.symbols.length;g>f;f++){b=d.chart.symbols[f];var h=Math.abs(b.getCenter().x-d.right_symbol.getCenter().x);if(b.getCenter().y>d.right_symbol.getCenter().y&&h<=d.right_symbol.width/2){c=!0;break}}c&&(d.right_symbol.setX(b.getX()+b.width+a),e())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},m.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},p.parse=n}(); -//# sourceMappingURL=flowchart.min.map \ No newline at end of file +!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(8);var r=e(4);e(14);var s={parse:r};"undefined"!=typeof window&&(window.FlowChart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),o=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var n=this.getAttr("maxWidth");if(n){for(var h=i.text.split(" "),a="",x=0,y=h.length;y>x;x++){var l=h[x];this.text.attr("text",a+" "+l),a+=this.text.getBBox().width>n?"\n"+l:" "+l}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*g,height:this.text.getBBox().height+2*g}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),o=s.drawLine,n=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function s(){for(var i,r=!1,o=0,n=e.chart.symbols.length;n>o;o++){i=e.chart.symbols[o];var h=Math.abs(i.getCenter().x-e.next.getCenter().x);if(i.getCenter().y>e.next.getCenter().y&&h<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),s())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,"",this.next_direction):this.drawLineTo(this.next))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),y=this.getLeft(),l=t.getCenter().x,g=t.getCenter().y,f=t.getTop(),p=t.getRight(),c=t.getLeft(),u=s===l,d=h===g,m=g>h,b=h>g,v=s>l,w=l>s,k=0,_=this.getAttr("line-length"),B=this.getAttr("line-width");if(e&&"bottom"!==e||!u||!m)if(e&&"right"!==e||!d||!w)if(e&&"left"!==e||!d||!v)if(e&&"right"!==e||!u||!b)if(e&&"right"!==e||!u||!m)if(e&&"bottom"!==e||!v)if(e&&"bottom"!==e||!w)if(e&&"right"===e&&v)r=o(this.chart,a,[{x:a.x+_/2,y:a.y},{x:a.x+_/2,y:f.y-_/2},{x:f.x,y:f.y-_/2},{x:f.x,y:f.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+_/2;else if(e&&"right"===e&&w)r=o(this.chart,a,[{x:f.x,y:a.y},{x:f.x,y:f.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+_/2;else if(e&&"bottom"===e&&u&&b)r=o(this.chart,x,[{x:x.x,y:x.y+_/2},{x:a.x+_/2,y:x.y+_/2},{x:a.x+_/2,y:f.y-_/2},{x:f.x,y:f.y-_/2},{x:f.x,y:f.y}],i),this.bottomStart=!0,t.topEnd=!0,k=x.x+_/2;else if("left"===e&&u&&b){var A=y.x-_/2;c.xL;L++)for(var O,X=this.chart.lines[L],T=X.attr("path"),Y=r.attr("path"),C=0,S=T.length-1;S>C;C++){var j=[];j.push(["M",T[C][1],T[C][2]]),j.push(["L",T[C+1][1],T[C+1][2]]);for(var E=j[0][1],z=j[0][2],P=j[1][1],R=j[1][2],F=0,I=Y.length-1;I>F;F++){var W=[];W.push(["M",Y[F][1],Y[F][2]]),W.push(["L",Y[F+1][1],Y[F+1][2]]);var N=W[0][1],V=W[0][2],q=W[1][1],G=W[1][2],Q=n(E,z,P,R,N,V,q,G);if(Q.onLine1&&Q.onLine2){var $;V===G?N>q?($=["L",Q.x+2*B,V],Y.splice(F+1,0,$),$=["C",Q.x+2*B,V,Q.x,V-4*B,Q.x-2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",Q.x-2*B,V],Y.splice(F+1,0,$),$=["C",Q.x-2*B,V,Q.x,V-4*B,Q.x+2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):V>G?($=["L",N,Q.y+2*B],Y.splice(F+1,0,$),$=["C",N,Q.y+2*B,N+4*B,Q.y,N,Q.y-2*B],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",N,Q.y-2*B],Y.splice(F+1,0,$),$=["C",N,Q.y-2*B,N+4*B,Q.y,N,Q.y+2*B],Y.splice(F+2,0,$),r.attr("path",Y)),F+=2,O+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,o="M{0},{1}";for(r=2,s=2*e.length+2;s>r;r+=2)o+=" L{"+r+"},{"+(r+1)+"}";var n=[i.x,i.y];for(r=0,s=e.length;s>r;r++)n.push(e[r].x),n.push(e[r].y);var h=t.paper.path(o,n);h.attr("stroke",t.options["element-color"]),h.attr("stroke-width",t.options["line-width"]);var a=t.options.font,x=t.options["font-family"],y=t.options["font-weight"];return a&&h.attr({font:a}),x&&h.attr({"font-family":x}),y&&h.attr({"font-weight":y}),h}function r(t,i,e,r){var s,o;"[object Array]"!==Object.prototype.toString.call(e)&&(e=[e]);var n="M{0},{1}";for(s=2,o=2*e.length+2;o>s;s+=2)n+=" L{"+s+"},{"+(s+1)+"}";var h=[i.x,i.y];for(s=0,o=e.length;o>s;s++)h.push(e[s].x),h.push(e[s].y);var a=t.paper.path(n,h);a.attr({stroke:t.options["line-color"],"stroke-width":t.options["line-width"],"arrow-end":t.options["arrow-end"]});var x=t.options.font,y=t.options["font-family"],l=t.options["font-weight"];if(x&&a.attr({font:x}),y&&a.attr({"font-family":y}),l&&a.attr({"font-weight":l}),r){var g=!1,f=t.paper.text(0,0,r),p=!1,c=e[0];i.y===c.y&&(p=!0);var u=0,d=0;g?(u=i.x>c.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"])),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),y&&f.attr({"font-family":y}),l&&f.attr({"font-weight":l})}return a}function s(t,i,e,r,s,o,n,h){var a,x,y,l,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-o)*(e-t)-(n-s)*(r-i),0===a?f:(x=i-o,y=t-s,l=(n-s)*x-(h-o)*y,g=(e-t)*x-(r-i)*y,x=l/a,y=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&1>x&&(f.onLine1=!0),y>0&&1>y&&(f.onLine2=!0),f)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?r.symbols[t.substring(0,i-1)]:r.symbols[t]}function e(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=X.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var r={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(l,t);break;case"end":g[t.key]=new n(l,t);break;case"operation":g[t.key]=new h(l,t);break;case"inputoutput":g[t.key]=new a(l,t);break;case"subroutine":g[t.key]=new x(l,t);break;case"condition":g[t.key]=new y(l,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var l=new s(t,i);this.diagram=l;var g={};!function f(t,i,s){var o=e(t);return r.start===t?l.startWith(o):i&&s&&!i.pathOk&&(i instanceof y?(s.yes===t&&i.yes(o),s.no===t&&i.no(o)):i.then(o)),o.pathOk?o:(o instanceof y?(t.yes&&f(t.yes,o,t),t.no&&f(t.no,o,t)):t.next&&f(t.next,o,t),o)}(this.start),l.render()},clean:function(){this.diagram.clean()}},l=[],g=0,f=1,p=t.length;p>f;f++)if("\n"===t[f]&&"\\"!==t[f-1]){var c=t.substring(g,f);g=f+1,l.push(c.replace(/\\\n/g,"\n"))}gu;){var m=l[u];m.indexOf("->")<0&&m.indexOf("=>")<0?(l[u-1]+="\n"+m,l.splice(u,1),d--):u++}for(;l.length>0;){var b=l.splice(0,1)[0];if(b.indexOf("=>")>=0){var v,w=b.split("=>"),k={key:w[0],symbolType:w[1],text:null,link:null,target:null,flowstate:null};if(k.symbolType.indexOf(": ")>=0&&(v=k.symbolType.split(": "),k.symbolType=v.shift(),k.text=v.join(": ")),k.text&&k.text.indexOf(":>")>=0?(v=k.text.split(":>"),k.text=v.shift(),k.link=v.join(":>")):k.symbolType.indexOf(":>")>=0&&(v=k.symbolType.split(":>"),k.symbolType=v.shift(),k.link=v.join(":>")),k.symbolType.indexOf("\n")>=0&&(k.symbolType=k.symbolType.split("\n")[0]),k.link){var _=k.link.indexOf("[")+1,B=k.link.indexOf("]");_>=0&&B>=0&&(k.target=k.link.substring(_,B),k.link=k.link.substring(0,_-1))}if(k.text&&k.text.indexOf("|")>=0){var A=k.text.split("|");k.flowstate=A.pop().trim(),k.text=A.join("|")}r.symbols[k.key]=k}else if(b.indexOf("->")>=0)for(var L=b.split("->"),M=0,O=L.length;O>M;M++){var X=L[M],T=i(X),Y=e(X),C=null;if(Y.indexOf(",")>=0){var S=Y.split(",");Y=S[0],C=S[1].trim()}if(r.start||(r.start=T),O>M+1){var j=L[M+1];T[Y]=i(j),T["direction_"+Y]=C,C=null}}}return r}var s=e(6),o=e(12),n=e(9),h=e(11),a=e(10),x=e(13),y=e(5);t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.yes_direction="bottom",this.no_direction="right",i.yes&&i.direction_yes&&i.no&&!i.direction_no?"right"===i.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):(this.no_direction="right",this.yes_direction="bottom"):i.yes&&!i.direction_yes&&i.no&&i.direction_no?"right"===i.direction_no?(this.yes_direction="bottom",this.no_direction="right"):(this.yes_direction="right",this.no_direction="bottom"):(this.yes_direction="bottom",this.no_direction="right"),this.yes_direction=this.yes_direction||"bottom",this.no_direction=this.no_direction||"right",this.text.attr({x:2*this.textMargin});var e=this.text.getBBox().width+3*this.textMargin;e+=e/2;var r=this.text.getBBox().height+2*this.textMargin;r+=r/2,r=Math.max(.5*e,r);var o=e/4,n=r/4;this.text.attr({x:o+this.textMargin/2});var a={x:o,y:n},x=[{x:o-e/4,y:n+r/4},{x:o-e/4+e/2,y:n+r/4+r/2},{x:o-e/4+e,y:n+r/4},{x:o-e/4+e/2,y:n+r/4-r/2},{x:o-e/4,y:n+r/4}],y=h(t,a,x);y.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&y.attr("href",i.link),i.target&&y.attr("target",i.target),i.key&&(y.node.id=i.key),y.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:y.getBBox().height/2}),this.group.push(y),y.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,n=e(3),h=n.drawPath;o(r,s),r.prototype.render=function(){this.yes_direction&&(this[this.yes_direction+"_symbol"]=this.yes_symbol),this.no_direction&&(this[this.no_direction+"_symbol"]=this.no_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.right_symbol){var e=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(e.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var r=this;!function s(){for(var i,e=!1,o=0,n=r.chart.symbols.length;n>o;o++){i=r.chart.symbols[o];var h=Math.abs(i.getCenter().x-r.right_symbol.getCenter().x);if(i.getCenter().y>r.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),s())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=o(i,n),this.symbols=[],this.lines=[],this.start=null}var s=e(15),o=e(1).defaults,n=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i=0,e=0,r=0,s=0,o=0,n=0;for(r=0,s=this.symbols.length;s>r;r++)t=this.symbols[r],t.width>i&&(i=t.width),t.height>e&&(e=t.height);for(r=0,s=this.symbols.length;s>r;r++)t=this.symbols[r],t.shiftX(this.options.x+(i-t.width)/2+this.options["line-width"]),t.shiftY(this.options.y+(e-t.height)/2+this.options["line-width"]);for(this.start.render(),r=0,s=this.symbols.length;s>r;r++)t=this.symbols[r],t.renderLines();for(o=this.maxXFromLine,r=0,s=this.symbols.length;s>r;r++){t=this.symbols[r];var h=t.getX()+t.width,a=t.getY()+t.height;h>o&&(o=h),a>n&&(n=a)}var x=this.options.scale,y=this.options["line-width"];this.paper.setSize(o*x+y*x,n*x+y*x),this.paper.setViewBox(0,0,o+y,n+y,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);e>s;s++)if(s in i&&i[s]===t)return s;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,n=r/2,a={x:o,y:n},x=[{x:o-this.textMargin,y:r},{x:o-this.textMargin+e,y:r},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:n}],y=h(t,a,x);y.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&y.attr("href",i.link),i.target&&y.attr("target",i.target),i.key&&(y.node.id=i.key),y.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:y.getBBox().height/2}),this.group.push(y),y.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,n=e(3),h=n.drawPath;o(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var o=this.getAttr("font"),n=this.getAttr("font-family"),h=this.getAttr("font-weight");o&&r.attr({font:o}),n&&r.attr({"font-family":n}),h&&r.attr({"font-weight":h}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); +//# sourceMappingURL=flowchart.min.js.map \ No newline at end of file diff --git a/release/flowchart.min.js.map b/release/flowchart.min.js.map new file mode 100644 index 00000000..22c4e11c --- /dev/null +++ b/release/flowchart.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 3956c0fd3abd37421728","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"CAAA,SAAAA,EAAAC,GACA,mBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,EAAAG,QAAA,gBACA,sBAAAC,gBAAAC,IACAD,QAAA,WAAAJ,OACA,CACA,GAAAM,GAAAN,EAAA,gBAAAC,SAAAE,QAAA,WAAAJ,EAAA,QACA,QAAAQ,KAAAD,IAAA,gBAAAL,iBAAAF,GAAAQ,GAAAD,EAAAC,KAECC,KAAA,SAAAC,GACD,MCKgB,UAAUC,GCX1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAX,OAGA,IAAAC,GAAAW,EAAAD,IACAX,WACAa,GAAAF,EACAG,QAAA,EAUA,OANAL,GAAAE,GAAAI,KAAAd,EAAAD,QAAAC,IAAAD,QAAAU,GAGAT,EAAAa,QAAA,EAGAb,EAAAD,QAvBA,GAAAY,KAqCA,OATAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,GAGAR,EAAA,KDwBM,SAAST,EAAQD,EAASU,GE9DhCA,EAAA,EACA,IAAAS,GAAAT,EAAA,EACAA,GAAA,GAEA,IAAAU,IACAD,QAGA,oBAAAE,UACAA,OAAAD,aAGAnB,EAAAD,QAAAoB,GFwEM,SAASnB,EAAQD,GGpFvB,QAAAsB,GAAAC,EAAAC,GACA,IAAAD,GAAA,kBAAAA,GACA,MAAAC,EAGA,IAAAC,KACA,QAAAC,KAAAF,GACAC,EAAAC,GAAAF,EAAAE,EAGA,KAAAA,IAAAH,GACAA,EAAAG,KACA,gBAAAD,GAAAC,GACAD,EAAAC,GAAAJ,EAAAG,EAAAC,GAAAH,EAAAG,IAEAD,EAAAC,GAAAH,EAAAG,GAIA,OAAAD,GAGA,QAAAE,GAAAC,EAAAC,GACA,qBAAAC,QAAA,OAEAF,EAAAG,OAAAF,EACAD,EAAAI,UAAAF,OAAAG,OAAAJ,EAAAG,WACAE,aACAC,MAAAP,EACAQ,YAAA,EACAC,UAAA,EACAC,cAAA,SAGA,CAEAV,EAAAG,OAAAF,CACA,IAAAU,GAAA,YACAA,GAAAP,UAAAH,EAAAG,UACAJ,EAAAI,UAAA,GAAAO,GACAX,EAAAI,UAAAE,YAAAN,GAMA3B,EAAAD,SACAwC,SAAAlB,EACAmB,SAAAd,IH+FM,SAAS1B,EAAQD,EAASU,GI3IhC,QAAAgC,GAAAC,EAAApB,EAAAqB,GACArC,KAAAoC,QACApC,KAAAsC,MAAAtC,KAAAoC,MAAAG,MAAAC,MACAxC,KAAAqC,SACArC,KAAAyC,eACAzC,KAAA0C,WAAA1B,EAAA0B,WACA1C,KAAA2C,UAAA3B,EAAA2B,WAAA,SAEA3C,KAAA4C,eAAA5B,EAAA6B,MAAA7B,EAAA,eAAAA,EAAA,eAAA8B,OAEA9C,KAAA+C,KAAA/C,KAAAoC,MAAAG,MAAAQ,KAAA,IAAA/B,EAAA+B,MAEA/B,EAAAgC,MAAAhD,KAAA+C,KAAAE,KAAA3C,GAAAU,EAAAgC,IAAA,KACAhD,KAAA+C,KAAAE,KAAAC,aAAA,QAAAlD,KAAAmD,QAAA,cAEAnD,KAAA+C,KAAAK,MACAC,cAAA,QACAC,EAAAtD,KAAAmD,QAAA,eACAI,KAAAvD,KAAAmD,QAAA,cACAK,YAAAxD,KAAAmD,QAAA,cAGA,IAAAM,GAAAzD,KAAAmD,QAAA,QACAO,EAAA1D,KAAAmD,QAAA,eACAQ,EAAA3D,KAAAmD,QAAA,cAEAM,IAAAzD,KAAA+C,KAAAK,MAAAK,SACAC,GAAA1D,KAAA+C,KAAAK,MAAAQ,cAAAF,IACAC,GAAA3D,KAAA+C,KAAAK,MAAAS,cAAAF,IAEA3C,EAAA8C,MAAA9D,KAAA+C,KAAAK,KAAA,OAAApC,EAAA8C,MACA9C,EAAA+C,QAAA/D,KAAA+C,KAAAK,KAAA,SAAApC,EAAA+C,OAEA,IAAAC,GAAAhE,KAAAmD,QAAA,WACA,IAAAa,EAAA,CAIA,OAFAC,GAAAjD,EAAA+B,KAAAmB,MAAA,KACAC,EAAA,GACApE,EAAA,EAAAqE,EAAAH,EAAAI,OAAAD,EAAArE,MAAA,CACA,GAAAuE,GAAAL,EAAAlE,EACAC,MAAA+C,KAAAK,KAAA,OAAAe,EAAA,IAAAG,GAEAH,GADAnE,KAAA+C,KAAAwB,UAAAC,MAAAR,EACA,KAAAM,EAEA,IAAAA,EAGAtE,KAAA+C,KAAAK,KAAA,OAAAe,EAAAM,UAAA,IAKA,GAFAzE,KAAAsC,MAAAoC,KAAA1E,KAAA+C,MAEAV,EAAA,CACA,GAAAsC,GAAA3E,KAAAmD,QAAA,cAEAd,GAAAe,MACAG,KAAAvD,KAAAmD,QAAA,QACAyB,OAAA5E,KAAAmD,QAAA,iBACA0B,eAAA7E,KAAAmD,QAAA,cACAqB,MAAAxE,KAAA+C,KAAAwB,UAAAC,MAAA,EAAAG,EACAG,OAAA9E,KAAA+C,KAAAwB,UAAAO,OAAA,EAAAH,IAGAtC,EAAAY,KAAAC,aAAA,QAAAlD,KAAAmD,QAAA,UAEAnC,EAAA8C,MAAAzB,EAAAe,KAAA,OAAApC,EAAA8C,MACA9C,EAAA+C,QAAA1B,EAAAe,KAAA,SAAApC,EAAA+C,QACA/C,EAAAgC,MAAAX,EAAAY,KAAA3C,GAAAU,EAAAgC,KAEAhD,KAAAsC,MAAAoC,KAAArC,GACAA,EAAA0C,aAAA/E,KAAA+C,MAEA/C,KAAA+C,KAAAK,MACA4B,EAAA3C,EAAAkC,UAAAO,OAAA,IAGA9E,KAAAiF,cAhFA,GAAAC,GAAA/E,EAAA,GACAgF,EAAAD,EAAAC,SACAC,EAAAF,EAAAE,qBAoFAjD,GAAAV,UAAA0B,QAAA,SAAAkC,GACA,GAAArF,KAAAoC,MAAA,CAGA,GAEAkD,GAFAC,EAAAvF,KAAAoC,MAAA,QAAApC,KAAAoC,MAAApB,QAAAqE,GAAAvC,OACA0C,EAAAxF,KAAAoC,MAAApB,QAAA,QAAAhB,KAAAoC,MAAApB,QAAAyE,QAAAzF,KAAA0C,YAAA2C,GAAAvC,MAKA,OAHA9C,MAAAoC,MAAApB,QAAA2B,WAAA3C,KAAAoC,MAAApB,QAAA2B,UAAA3C,KAAA2C,aACA2C,EAAAtF,KAAAoC,MAAApB,QAAA2B,UAAA3C,KAAA2C,WAAA0C,IAEAC,GAAAE,GAAAD,IAGApD,EAAAV,UAAAwD,WAAA,WACAjF,KAAAsC,MAAAoD,UAAA,IAAA1F,KAAAmD,QAAA,kBAAAnD,KAAAmD,QAAA,eAEAnD,KAAAwE,MAAAxE,KAAAsC,MAAAiC,UAAAC,MACAxE,KAAA8E,OAAA9E,KAAAsC,MAAAiC,UAAAO,QAGA3C,EAAAV,UAAAkE,UAAA,WACA,OAAArC,EAAAtD,KAAA4F,OAAA5F,KAAAwE,MAAA,EACAQ,EAAAhF,KAAA6F,OAAA7F,KAAA8E,OAAA,IAGA3C,EAAAV,UAAAmE,KAAA,WACA,MAAA5F,MAAAsC,MAAAiC,UAAAjB,GAGAnB,EAAAV,UAAAoE,KAAA,WACA,MAAA7F,MAAAsC,MAAAiC,UAAAS,GAGA7C,EAAAV,UAAAqE,OAAA,SAAAxC,GACAtD,KAAAsC,MAAAoD,UAAA,KAAA1F,KAAA4F,OAAAtC,GAAA,IAAAtD,KAAA6F,SAGA1D,EAAAV,UAAAsE,KAAA,SAAAzC,GACAtD,KAAAsC,MAAAoD,UAAA,IAAApC,EAAA,IAAAtD,KAAA6F,SAGA1D,EAAAV,UAAAuE,OAAA,SAAAhB,GACAhF,KAAAsC,MAAAoD,UAAA,IAAA1F,KAAA4F,OAAA,KAAA5F,KAAA6F,OAAAb,KAGA7C,EAAAV,UAAAwE,KAAA,SAAAjB,GACAhF,KAAAsC,MAAAoD,UAAA,IAAA1F,KAAA4F,OAAA,IAAAZ,IAGA7C,EAAAV,UAAAyE,OAAA,WACA,GAAAlB,GAAAhF,KAAA6F,OACAvC,EAAAtD,KAAA4F,OAAA5F,KAAAwE,MAAA,CACA,QAAAlB,IAAA0B,MAGA7C,EAAAV,UAAA0E,UAAA,WACA,GAAAnB,GAAAhF,KAAA6F,OAAA7F,KAAA8E,OACAxB,EAAAtD,KAAA4F,OAAA5F,KAAAwE,MAAA,CACA,QAAAlB,IAAA0B,MAGA7C,EAAAV,UAAA2E,QAAA,WACA,GAAApB,GAAAhF,KAAA6F,OAAA7F,KAAAsC,MAAAiC,UAAAO,OAAA,EACAxB,EAAAtD,KAAA4F,MACA,QAAAtC,IAAA0B,MAGA7C,EAAAV,UAAA4E,SAAA,WACA,GAAArB,GAAAhF,KAAA6F,OAAA7F,KAAAsC,MAAAiC,UAAAO,OAAA,EACAxB,EAAAtD,KAAA4F,OAAA5F,KAAAsC,MAAAiC,UAAAC,KACA,QAAAlB,IAAA0B,MAGA7C,EAAAV,UAAA6E,OAAA,WACA,GAAAtG,KAAA6C,KAAA,CAEA,GAAA0D,GAAAvG,KAAAmD,QAAA,cAEA,cAAAnD,KAAA4C,eAAA,CAEA,GAAA4D,GAAAxG,KAAAqG,UAEA,KAAArG,KAAA6C,KAAA4D,aAAA,CAEAzG,KAAA6C,KAAAoD,KAAAO,EAAAxB,EAAAhF,KAAA6C,KAAAiC,OAAA,GACA9E,KAAA6C,KAAAiD,OAAA9F,KAAAsC,MAAAiC,UAAAjB,EAAAtD,KAAAwE,MAAA+B,EAEA,IAAAG,GAAA1G,MACA,QAAA2G,KAGA,OADAC,GADAC,GAAA,EAEA9G,EAAA,EAAA+G,EAAAJ,EAAAtE,MAAAqD,QAAApB,OAAAyC,EAAA/G,MAAA,CACA6G,EAAAF,EAAAtE,MAAAqD,QAAA1F,EAEA,IAAAgH,GAAAC,KAAAC,IAAAL,EAAAjB,YAAArC,EAAAoD,EAAA7D,KAAA8C,YAAArC,EACA,IAAAsD,EAAAjB,YAAAX,EAAA0B,EAAA7D,KAAA8C,YAAAX,GAAA+B,GAAAL,EAAA7D,KAAA2B,MAAA,GACAqC,GAAA,CACA,QAIAA,IACAH,EAAA7D,KAAAkD,KAAAa,EAAAhB,OAAAgB,EAAApC,MAAA+B,GACAI,QAIA3G,KAAA6C,KAAA4D,cAAA,EAEAzG,KAAA6C,KAAAyD,cAEA,CACA,GAAAY,GAAAlH,KAAAmG,WAEAnG,MAAA6C,KAAA4D,eACAzG,KAAA6C,KAAAmD,OAAAhG,KAAA6F,OAAA7F,KAAA8E,OAAAyB,GACAvG,KAAA6C,KAAAkD,KAAAmB,EAAA5D,EAAAtD,KAAA6C,KAAA2B,MAAA,GACAxE,KAAA6C,KAAA4D,cAAA,EAEAzG,KAAA6C,KAAAyD,aAMAnE,EAAAV,UAAA0F,YAAA,WACAnH,KAAA6C,OACA7C,KAAA4C,eACA5C,KAAAoH,WAAApH,KAAA6C,KAAA,GAAA7C,KAAA4C,gBAEA5C,KAAAoH,WAAApH,KAAA6C,QAKAV,EAAAV,UAAA2F,WAAA,SAAA/E,EAAAU,EAAAsE,GACArH,KAAAyC,YAAA6E,QAAAjF,GAAA,GACArC,KAAAyC,YAAAiC,KAAArC,EAGA,IAoBAkF,GApBAjE,EAAAtD,KAAA2F,YAAArC,EACA0B,EAAAhF,KAAA2F,YAAAX,EACAwC,EAAAxH,KAAAqG,WACAoB,EAAAzH,KAAAmG,YACAuB,EAAA1H,KAAAoG,UAEAuB,EAAAtF,EAAAsD,YAAArC,EACAsE,EAAAvF,EAAAsD,YAAAX,EACA6C,EAAAxF,EAAA6D,SACA4B,EAAAzF,EAAAgE,WACA0B,EAAA1F,EAAA+D,UAEA4B,EAAA1E,IAAAqE,EACAM,EAAAjD,IAAA4C,EACAM,EAAAN,EAAA5C,EACAmD,EAAAnD,EAAA4C,EACAQ,EAAA9E,EAAAqE,EACAU,EAAAV,EAAArE,EAEAgF,EAAA,EAEA/B,EAAAvG,KAAAmD,QAAA,eACAoF,EAAAvI,KAAAmD,QAAA,aAEA,IAAAkE,GAAA,WAAAA,IAAAW,IAAAE,EAKA,GAAAb,GAAA,UAAAA,IAAAY,IAAAI,EAKA,GAAAhB,GAAA,SAAAA,IAAAY,IAAAG,EAKA,GAAAf,GAAA,UAAAA,IAAAW,IAAAG,EAUA,GAAAd,GAAA,UAAAA,IAAAW,IAAAE,EAUA,GAAAb,GAAA,WAAAA,IAAAe,EAmBA,GAAAf,GAAA,WAAAA,IAAAgB,EAWA,GAAAhB,GAAA,UAAAA,GAAAe,EACAb,EAAApC,EAAAnF,KAAAoC,MAAAoF,IACAlE,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAAwC,EAAAxC,IACA1B,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,IACAjC,GACA/C,KAAAwI,YAAA,EACAnG,EAAAoG,QAAA,EACAH,EAAAd,EAAAlE,EAAAiD,EAAA,MACA,IAAAc,GAAA,UAAAA,GAAAgB,EACAd,EAAApC,EAAAnF,KAAAoC,MAAAoF,IACAlE,EAAAuE,EAAAvE,EAAA0B,EAAAwC,EAAAxC,IACA1B,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,IACAjC,GACA/C,KAAAwI,YAAA,EACAnG,EAAAoG,QAAA,EACAH,EAAAd,EAAAlE,EAAAiD,EAAA,MACA,IAAAc,GAAA,WAAAA,GAAAW,GAAAG,EACAZ,EAAApC,EAAAnF,KAAAoC,MAAAqF,IACAnE,EAAAmE,EAAAnE,EAAA0B,EAAAyC,EAAAzC,EAAAuB,EAAA,IACAjD,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAAyC,EAAAzC,EAAAuB,EAAA,IACAjD,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,IACAjC,GACA/C,KAAA0I,aAAA,EACArG,EAAAoG,QAAA,EACAH,EAAAb,EAAAnE,EAAAiD,EAAA,MACA,aAAAc,GAAAW,GAAAG,EAAA,CACA,GAAAQ,GAAAjB,EAAApE,EAAAiD,EAAA,CACAwB,GAAAzE,EAAAoE,EAAApE,IACAqF,EAAAZ,EAAAzE,EAAAiD,EAAA,GAEAgB,EAAApC,EAAAnF,KAAAoC,MAAAsF,IACApE,EAAAqF,EAAA3D,EAAA0C,EAAA1C,IACA1B,EAAAqF,EAAA3D,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,IACAjC,GACA/C,KAAA4I,WAAA,EACAvG,EAAAoG,QAAA,EACAH,EAAAZ,EAAApE,MACA,SAAA+D,IACAE,EAAApC,EAAAnF,KAAAoC,MAAAsF,IACApE,EAAAuE,EAAAvE,GAAAoE,EAAApE,EAAAuE,EAAAvE,GAAA,EAAA0B,EAAA0C,EAAA1C,IACA1B,EAAAuE,EAAAvE,GAAAoE,EAAApE,EAAAuE,EAAAvE,GAAA,EAAA0B,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,IACAjC,GACA/C,KAAA4I,WAAA,EACAvG,EAAAoG,QAAA,EACAH,EAAAZ,EAAApE,OA9DAiE,GAAApC,EAAAnF,KAAAoC,MAAAqF,IACAnE,EAAAmE,EAAAnE,EAAA0B,EAAAyC,EAAAzC,EAAAuB,EAAA,IACAjD,EAAAmE,EAAAnE,GAAAmE,EAAAnE,EAAAuE,EAAAvE,GAAA,EAAA0B,EAAAyC,EAAAzC,EAAAuB,EAAA,IACAjD,EAAAmE,EAAAnE,GAAAmE,EAAAnE,EAAAuE,EAAAvE,GAAA,EAAA0B,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,IACAjC,GACA/C,KAAA0I,aAAA,EACArG,EAAAoG,QAAA,EACAH,EAAAb,EAAAnE,GAAAmE,EAAAnE,EAAAuE,EAAAvE,GAAA,MA3BAiE,GADAvH,KAAA6I,SAAAV,EACAhD,EAAAnF,KAAAoC,MAAAqF,IACAnE,EAAAmE,EAAAnE,EAAA0B,EAAAyC,EAAAzC,EAAAuB,EAAA,IACAjD,EAAAmE,EAAAnE,GAAAmE,EAAAnE,EAAAuE,EAAAvE,GAAA,EAAA0B,EAAAyC,EAAAzC,EAAAuB,EAAA,IACAjD,EAAAmE,EAAAnE,GAAAmE,EAAAnE,EAAAuE,EAAAvE,GAAA,EAAA0B,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,IACAjC,GAEAoC,EAAAnF,KAAAoC,MAAAqF,IACAnE,EAAAmE,EAAAnE,EAAA0B,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,IACAjC,GAEA/C,KAAA0I,aAAA,EACArG,EAAAoG,QAAA,EACAH,EAAAb,EAAAnE,GAAAmE,EAAAnE,EAAAuE,EAAAvE,GAAA,MA3BAiE,GAAApC,EAAAnF,KAAAoC,MAAAoF,IACAlE,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAAwC,EAAAxC,IACA1B,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,IACAjC,GACA/C,KAAAwI,YAAA,EACAnG,EAAAoG,QAAA,EACAH,EAAAd,EAAAlE,EAAAiD,EAAA,MAlBAgB,GAAApC,EAAAnF,KAAAoC,MAAAoF,IACAlE,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAAwC,EAAAxC,IACA1B,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,EAAAuB,EAAA,IACAjD,EAAAuE,EAAAvE,EAAA0B,EAAA6C,EAAA7C,IACAjC,GACA/C,KAAAwI,YAAA,EACAnG,EAAAoG,QAAA,EACAH,EAAAd,EAAAlE,EAAAiD,EAAA,MAbAgB,GAAApC,EAAAnF,KAAAoC,MAAAsF,EAAAI,EAAA/E,GACA/C,KAAA4I,WAAA,EACAvG,EAAAyG,UAAA,EACAR,EAAAR,EAAAxE,MARAiE,GAAApC,EAAAnF,KAAAoC,MAAAoF,EAAAO,EAAAhF,GACA/C,KAAAwI,YAAA,EACAnG,EAAAwG,SAAA,EACAP,EAAAP,EAAAzE,MARAiE,GAAApC,EAAAnF,KAAAoC,MAAAqF,EAAAI,EAAA9E,GACA/C,KAAA0I,aAAA,EACArG,EAAAoG,QAAA,EACAH,EAAAb,EAAAnE,CAoHA,IAAAiE,EAAA,CACA,OAAAwB,GAAA,EAAAC,EAAAhJ,KAAAoC,MAAA6G,MAAA5E,OAAA2E,EAAAD,MAOA,OALAjC,GADAoC,EAAAlJ,KAAAoC,MAAA6G,MAAAF,GAGAI,EAAAD,EAAA9F,KAAA,QACAgG,EAAA7B,EAAAnE,KAAA,QAEAiG,EAAA,EAAAC,EAAAH,EAAA9E,OAAA,EAAAiF,EAAAD,MAAA,CACA,GAAAE,KACAA,GAAA7E,MAAA,IAAAyE,EAAAE,GAAA,GAAAF,EAAAE,GAAA,KACAE,EAAA7E,MAAA,IAAAyE,EAAAE,EAAA,MAAAF,EAAAE,EAAA,OAOA,QALAG,GAAAD,EAAA,MACAE,EAAAF,EAAA,MACAG,EAAAH,EAAA,MACAI,EAAAJ,EAAA,MAEAK,EAAA,EAAAC,EAAAT,EAAA/E,OAAA,EAAAwF,EAAAD,MAAA,CACA,GAAAE,KACAA,GAAApF,MAAA,IAAA0E,EAAAQ,GAAA,GAAAR,EAAAQ,GAAA,KACAE,EAAApF,MAAA,IAAA0E,EAAAQ,EAAA,MAAAR,EAAAQ,EAAA,OAEA,IAAAG,GAAAD,EAAA,MACAE,EAAAF,EAAA,MACAG,EAAAH,EAAA,MACAI,EAAAJ,EAAA,MAEAK,EAAA/E,EAAAoE,EAAAC,EAAAC,EAAAC,EAAAI,EAAAC,EAAAC,EAAAC,EACA,IAAAC,EAAAC,SAAAD,EAAAE,QAAA,CAEA,GAAAC,EACAN,KAAAE,EACAH,EAAAE,GACAK,GAAA,IAAAH,EAAA7G,EAAA,EAAAiF,EAAAyB,GACAZ,EAAAmB,OAAAX,EAAA,IAAAU,GACAA,GAAA,IAAAH,EAAA7G,EAAA,EAAAiF,EAAAyB,EAAAG,EAAA7G,EAAA0G,EAAA,EAAAzB,EAAA4B,EAAA7G,EAAA,EAAAiF,EAAAyB,GACAZ,EAAAmB,OAAAX,EAAA,IAAAU,GACA/C,EAAAnE,KAAA,OAAAgG,KAEAkB,GAAA,IAAAH,EAAA7G,EAAA,EAAAiF,EAAAyB,GACAZ,EAAAmB,OAAAX,EAAA,IAAAU,GACAA,GAAA,IAAAH,EAAA7G,EAAA,EAAAiF,EAAAyB,EAAAG,EAAA7G,EAAA0G,EAAA,EAAAzB,EAAA4B,EAAA7G,EAAA,EAAAiF,EAAAyB,GACAZ,EAAAmB,OAAAX,EAAA,IAAAU,GACA/C,EAAAnE,KAAA,OAAAgG,IAGAY,EAAAE,GACAI,GAAA,IAAAP,EAAAI,EAAAnF,EAAA,EAAAuD,GACAa,EAAAmB,OAAAX,EAAA,IAAAU,GACAA,GAAA,IAAAP,EAAAI,EAAAnF,EAAA,EAAAuD,EAAAwB,EAAA,EAAAxB,EAAA4B,EAAAnF,EAAA+E,EAAAI,EAAAnF,EAAA,EAAAuD,GACAa,EAAAmB,OAAAX,EAAA,IAAAU,GACA/C,EAAAnE,KAAA,OAAAgG,KAEAkB,GAAA,IAAAP,EAAAI,EAAAnF,EAAA,EAAAuD,GACAa,EAAAmB,OAAAX,EAAA,IAAAU,GACAA,GAAA,IAAAP,EAAAI,EAAAnF,EAAA,EAAAuD,EAAAwB,EAAA,EAAAxB,EAAA4B,EAAAnF,EAAA+E,EAAAI,EAAAnF,EAAA,EAAAuD,GACAa,EAAAmB,OAAAX,EAAA,IAAAU,GACA/C,EAAAnE,KAAA,OAAAgG,IAIAQ,GAAA,EACA9C,GAAA,IAMA9G,KAAAoC,MAAA6G,MAAAvE,KAAA6C,KAGAvH,KAAAoC,MAAAoI,cAAAxK,KAAAoC,MAAAoI,cAAAlC,EAAAtI,KAAAoC,MAAAoI,gBACAxK,KAAAoC,MAAAoI,aAAAlC,IAIA5I,EAAAD,QAAA0C,GJyJM,SAASzC,EAAQD,GKxlBvB,QAAAgL,GAAArI,EAAAsI,EAAAC,GACA,GAAA5K,GAAA+G,EACA8D,EAAA,UACA,KAAA7K,EAAA,EAAA+G,EAAA,EAAA6D,EAAAtG,OAAA,EAAAyC,EAAA/G,KAAA,EACA6K,GAAA,MAAA7K,EAAA,OAAAA,EAAA,MAEA,IAAA8K,IAAAH,EAAApH,EAAAoH,EAAA1F,EACA,KAAAjF,EAAA,EAAA+G,EAAA6D,EAAAtG,OAAAyC,EAAA/G,MACA8K,EAAAnG,KAAAiG,EAAA5K,GAAAuD,GACAuH,EAAAnG,KAAAiG,EAAA5K,GAAAiF,EAEA,IAAA3C,GAAAD,EAAAG,MAAAqI,OAAAC,EACAxI,GAAAe,KAAA,SAAAhB,EAAApB,QAAA,kBACAqB,EAAAe,KAAA,eAAAhB,EAAApB,QAAA,cAEA,IAAAyC,GAAArB,EAAApB,QAAAyC,KACAC,EAAAtB,EAAApB,QAAA,eACA2C,EAAAvB,EAAApB,QAAA,cAMA,OAJAyC,IAAApB,EAAAe,MAAAK,SACAC,GAAArB,EAAAe,MAAAQ,cAAAF,IACAC,GAAAtB,EAAAe,MAAAS,cAAAF,IAEAtB,EAGA,QAAA8C,GAAA/C,EAAA0I,EAAAC,EAAAhI,GACA,GAAAhD,GAAA+G,CAEA,oBAAAvF,OAAAE,UAAAuJ,SAAAxK,KAAAuK,KACAA,MAGA,IAAAH,GAAA,UACA,KAAA7K,EAAA,EAAA+G,EAAA,EAAAiE,EAAA1G,OAAA,EAAAyC,EAAA/G,KAAA,EACA6K,GAAA,MAAA7K,EAAA,OAAAA,EAAA,MAEA,IAAA8K,IAAAC,EAAAxH,EAAAwH,EAAA9F,EACA,KAAAjF,EAAA,EAAA+G,EAAAiE,EAAA1G,OAAAyC,EAAA/G,MACA8K,EAAAnG,KAAAqG,EAAAhL,GAAAuD,GACAuH,EAAAnG,KAAAqG,EAAAhL,GAAAiF,EAGA,IAAAuC,GAAAnF,EAAAG,MAAAqI,OAAAC,EACAtD,GAAAnE,MACAwB,OAAAxC,EAAApB,QAAA,cACA6D,eAAAzC,EAAApB,QAAA,cACAiK,YAAA7I,EAAApB,QAAA,cAGA,IAAAyC,GAAArB,EAAApB,QAAAyC,KACAC,EAAAtB,EAAApB,QAAA,eACA2C,EAAAvB,EAAApB,QAAA,cAMA,IAJAyC,GAAA8D,EAAAnE,MAAAK,SACAC,GAAA6D,EAAAnE,MAAAQ,cAAAF,IACAC,GAAA4D,EAAAnE,MAAAS,cAAAF,IAEAZ,EAAA,CAEA,GAAAmI,IAAA,EAEAC,EAAA/I,EAAAG,MAAAQ,KAAA,IAAAA,GAEAqI,GAAA,EACAC,EAAAN,EAAA,EAEAD,GAAA9F,IAAAqG,EAAArG,IACAoG,GAAA,EAGA,IAAA9H,GAAA,EACA0B,EAAA,CAEAkG,IAEA5H,EADAwH,EAAAxH,EAAA+H,EAAA/H,EACAwH,EAAAxH,GAAAwH,EAAAxH,EAAA+H,EAAA/H,GAAA,EAEA+H,EAAA/H,GAAA+H,EAAA/H,EAAAwH,EAAAxH,GAAA,EAIA0B,EADA8F,EAAA9F,EAAAqG,EAAArG,EACA8F,EAAA9F,GAAA8F,EAAA9F,EAAAqG,EAAArG,GAAA,EAEAqG,EAAArG,GAAAqG,EAAArG,EAAA8F,EAAA9F,GAAA,EAGAoG,GACA9H,GAAA6H,EAAA5G,UAAAC,MAAA,EACAQ,GAAA5C,EAAApB,QAAA,iBAEAsC,GAAAlB,EAAApB,QAAA,eACAgE,GAAAmG,EAAA5G,UAAAO,OAAA,KAGAxB,EAAAwH,EAAAxH,EACA0B,EAAA8F,EAAA9F,EAEAoG,GACA9H,GAAAlB,EAAApB,QAAA,iBACAgE,GAAA5C,EAAApB,QAAA,iBAEAsC,GAAAlB,EAAApB,QAAA,iBACAgE,GAAA5C,EAAApB,QAAA,iBAIAmK,EAAA/H,MACAC,cAAA,QACAG,YAAApB,EAAApB,QAAA,aACAuC,KAAAnB,EAAApB,QAAA,cACAsC,IACA0B,MAGAvB,GAAA0H,EAAA/H,MAAAK,SACAC,GAAAyH,EAAA/H,MAAAQ,cAAAF,IACAC,GAAAwH,EAAA/H,MAAAS,cAAAF,IAGA,MAAA4D,GAGA,QAAAnC,GAAAkG,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAEA,GAAAC,GAAAhM,EAAAiM,EAAAC,EAAAC,EAAAC,GACA5I,EAAA,KACA0B,EAAA,KACAoF,SAAA,EACAC,SAAA,EAGA,OADAyB,IAAAD,EAAAF,IAAAH,EAAAF,IAAAM,EAAAF,IAAAD,EAAAF,GACA,IAAAO,EACAI,GAEApM,EAAAyL,EAAAI,EACAI,EAAAT,EAAAI,EACAM,GAAAJ,EAAAF,GAAA5L,GAAA+L,EAAAF,GAAAI,EACAE,GAAAT,EAAAF,GAAAxL,GAAA2L,EAAAF,GAAAQ,EACAjM,EAAAkM,EAAAF,EACAC,EAAAE,EAAAH,EAGAI,EAAA5I,EAAAgI,EAAAxL,GAAA0L,EAAAF,GACAY,EAAAlH,EAAAuG,EAAAzL,GAAA2L,EAAAF,GAOAzL,EAAA,KAAAA,IACAoM,EAAA9B,SAAA,GAGA2B,EAAA,KAAAA,IACAG,EAAA7B,SAAA,GAGA6B,GAGAxM,EAAAD,SACAgL,WACAtF,WACAC,0BLmmBM,SAAS1F,EAAQD,EAASU,GMhwBhC,QAAAS,GAAAuL,GAsHA,QAAAC,GAAAC,GACA,GAAAC,GAAAD,EAAA/E,QAAA,OACAiF,EAAAF,EAAA/E,QAAA,IACA,OAAAgF,IAAA,GAAAC,GAAA,EACAnK,EAAAqD,QAAA4G,EAAA5H,UAAA,EAAA6H,EAAA,IAEAlK,EAAAqD,QAAA4G,GAGA,QAAAG,GAAAH,GACA,GAAAxJ,GAAA,OACAyJ,EAAAD,EAAA/E,QAAA,OACAiF,EAAAF,EAAA/E,QAAA,IASA,OARAgF,IAAA,GAAAC,GAAA,IACA1J,EAAA4J,EAAAhI,UAAA6H,EAAAC,GACA1J,EAAAyE,QAAA,QACA,QAAAzE,GAAA,OAAAA,IACAA,EAAA,SAAAA,IAIAA,EA1IAsJ,KAAA,GACAA,IAAAO,MA4FA,QA1FAtK,IACAqD,WACAkH,MAAA,KACAC,QAAA,SAAAC,EAAA7L,GAWA,QAAA8L,GAAAT,GACA,GAAAU,EAAAV,EAAArJ,KACA,MAAA+J,GAAAV,EAAArJ,IAGA,QAAAqJ,EAAA3J,YACA,YACAqK,EAAAV,EAAArJ,KAAA,GAAAgK,GAAAC,EAAAZ,EACA,MACA,WACAU,EAAAV,EAAArJ,KAAA,GAAAkK,GAAAD,EAAAZ,EACA,MACA,iBACAU,EAAAV,EAAArJ,KAAA,GAAAmK,GAAAF,EAAAZ,EACA,MACA,mBACAU,EAAAV,EAAArJ,KAAA,GAAAoK,GAAAH,EAAAZ,EACA,MACA,kBACAU,EAAAV,EAAArJ,KAAA,GAAAqK,GAAAJ,EAAAZ,EACA,MACA,iBACAU,EAAAV,EAAArJ,KAAA,GAAAsK,GAAAL,EAAAZ,EACA,MACA,SACA,UAAAkB,OAAA,sBAGA,MAAAR,GAAAV,EAAArJ,KAtCA,GAAA0D,GAAA1G,IAEAA,MAAAiN,SACAjN,KAAAiN,QAAAO,OAGA,IAAAP,GAAA,GAAApM,GAAAgM,EAAA7L,EACAhB,MAAAiN,SACA,IAAAF,OAiCA,QAAAU,GAAApB,EAAAqB,EAAAC,GACA,GAAAC,GAAAd,EAAAT,EAiBA,OAfA3F,GAAAiG,QAAAN,EACAY,EAAAY,UAAAD,GACAF,GAAAC,IAAAD,EAAAI,SACAJ,YAAA,IACAC,EAAAI,MAAA1B,GACAqB,EAAAK,IAAAH,GAEAD,EAAAK,KAAA3B,GACAqB,EAAAM,GAAAJ,IAGAF,EAAAO,KAAAL,IAIAA,EAAAE,OACAF,GAGAA,YAAA,IACAvB,EAAA0B,KACAN,EAAApB,EAAA0B,IAAAH,EAAAvB,GAEAA,EAAA2B,IACAP,EAAApB,EAAA2B,GAAAJ,EAAAvB,IAEAA,EAAAxJ,MACA4K,EAAApB,EAAAxJ,KAAA+K,EAAAvB,GAGAuB,IACA5N,KAAA2M,OAEAM,EAAA3G,UAEAkH,MAAA,WACAxN,KAAAiN,QAAAO,UAIAvE,KACAiF,EAAA,EACAC,EAAA,EAAAC,EAAAjC,EAAA9H,OAAA+J,EAAAD,MACA,UAAAhC,EAAAgC,IAAA,OAAAhC,EAAAgC,EAAA,IACA,GAAAE,GAAAlC,EAAA1H,UAAAyJ,EAAAC,EACAD,GAAAC,EAAA,EACAlF,EAAAvE,KAAA2J,EAAAC,QAAA,eAIAJ,EAAA/B,EAAA9H,QACA4E,EAAAvE,KAAAyH,EAAAoC,OAAAL,GAGA,QAAAnF,GAAA,EAAAjC,EAAAmC,EAAA5E,OAAAyC,EAAAiC,GAAA,CACA,GAAAyF,GAAAvF,EAAAF,EAEAyF,GAAAlH,QAAA,SAAAkH,EAAAlH,QAAA,SACA2B,EAAAF,EAAA,SAAAyF,EACAvF,EAAAsB,OAAAxB,EAAA,GACAjC,KAEAiC,IA4BA,KAAAE,EAAA5E,OAAA,IACA,GAAAkD,GAAA0B,EAAAsB,OAAA,OAEA,IAAAhD,EAAAD,QAAA,UAEA,GAUAmH,GAVAC,EAAAnH,EAAArD,MAAA,MACA7B,GACAW,IAAA0L,EAAA,GACAhM,WAAAgM,EAAA,GACA3L,KAAA,KACAe,KAAA,KACAC,OAAA,KACApB,UAAA,KA0BA,IArBAN,EAAAK,WAAA4E,QAAA,WACAmH,EAAApM,EAAAK,WAAAwB,MAAA,MACA7B,EAAAK,WAAA+L,EAAA9H,QACAtE,EAAAU,KAAA0L,EAAAE,KAAA,OAGAtM,EAAAU,MAAAV,EAAAU,KAAAuE,QAAA,UACAmH,EAAApM,EAAAU,KAAAmB,MAAA,MACA7B,EAAAU,KAAA0L,EAAA9H,QACAtE,EAAAyB,KAAA2K,EAAAE,KAAA,OACAtM,EAAAK,WAAA4E,QAAA,WACAmH,EAAApM,EAAAK,WAAAwB,MAAA,MACA7B,EAAAK,WAAA+L,EAAA9H,QACAtE,EAAAyB,KAAA2K,EAAAE,KAAA,OAGAtM,EAAAK,WAAA4E,QAAA,WACAjF,EAAAK,WAAAL,EAAAK,WAAAwB,MAAA,UAIA7B,EAAAyB,KAAA,CACA,GAAAwI,GAAAjK,EAAAyB,KAAAwD,QAAA,OACAiF,EAAAlK,EAAAyB,KAAAwD,QAAA,IACAgF,IAAA,GAAAC,GAAA,IACAlK,EAAA0B,OAAA1B,EAAAyB,KAAAW,UAAA6H,EAAAC,GACAlK,EAAAyB,KAAAzB,EAAAyB,KAAAW,UAAA,EAAA6H,EAAA,IAMA,GAAAjK,EAAAU,MACAV,EAAAU,KAAAuE,QAAA,SACA,GAAAsH,GAAAvM,EAAAU,KAAAmB,MAAA,IACA7B,GAAAM,UAAAiM,EAAAC,MAAAnC,OACArK,EAAAU,KAAA6L,EAAAD,KAAA,KAKAvM,EAAAqD,QAAApD,EAAAW,KAAAX,MAEA,IAAAkF,EAAAD,QAAA,SAGA,OADAwH,GAAAvH,EAAArD,MAAA,MACAnE,EAAA,EAAAgP,EAAAD,EAAAzK,OAAA0K,EAAAhP,MAAA,CACA,GAAA0M,GAAAqC,EAAA/O,GAEAiP,EAAA5C,EAAAK,GACA5J,EAAA2J,EAAAC,GAEAwC,EAAA,IACA,IAAApM,EAAAyE,QAAA,SACA,GAAA4H,GAAArM,EAAAqB,MAAA,IACArB,GAAAqM,EAAA,GACAD,EAAAC,EAAA,GAAAxC,OAOA,GAJAtK,EAAAuK,QACAvK,EAAAuK,MAAAqC,GAGAD,EAAAhP,EAAA,GACA,GAAAoP,GAAAL,EAAA/O,EAAA,EACAiP,GAAAnM,GAAAuJ,EAAA+C,GACAH,EAAA,aAAAnM,GAAAoM,EACAA,EAAA,OAMA,MAAA7M,GAhPA,GAAAvB,GAAAV,EAAA,GACA6M,EAAA7M,EAAA,IACA+M,EAAA/M,EAAA,GACAgN,EAAAhN,EAAA,IACAiN,EAAAjN,EAAA,IACAkN,EAAAlN,EAAA,IACAmN,EAAAnN,EAAA,EA6OAT,GAAAD,QAAAmB,GNkxBM,SAASlB,EAAQD,EAASU,GOhgChC,QAAAmN,GAAAlL,EAAApB,GACAA,QACAmB,EAAA3B,KAAAR,KAAAoC,EAAApB,GACAhB,KAAAoP,WAAApP,KAAAmD,QAAA,eACAnD,KAAAqP,cAAA,SACArP,KAAAsP,aAAA,QACAtO,EAAA+M,KAAA/M,EAAAuO,eAAAvO,EAAAgN,KAAAhN,EAAAwO,aACA,UAAAxO,EAAAuO,eACAvP,KAAAsP,aAAA,SACAtP,KAAAqP,cAAA,UAEArP,KAAAsP,aAAA,QACAtP,KAAAqP,cAAA,UAEArO,EAAA+M,MAAA/M,EAAAuO,eAAAvO,EAAAgN,IAAAhN,EAAAwO,aACA,UAAAxO,EAAAwO,cACAxP,KAAAqP,cAAA,SACArP,KAAAsP,aAAA,UAEAtP,KAAAqP,cAAA,QACArP,KAAAsP,aAAA,WAGAtP,KAAAqP,cAAA,SACArP,KAAAsP,aAAA,SAGAtP,KAAAqP,cAAArP,KAAAqP,eAAA,SACArP,KAAAsP,aAAAtP,KAAAsP,cAAA,QAEAtP,KAAA+C,KAAAK,MACAE,EAAA,EAAAtD,KAAAoP,YAGA,IAAA5K,GAAAxE,KAAA+C,KAAAwB,UAAAC,MAAA,EAAAxE,KAAAoP,UACA5K,MAAA,CACA,IAAAM,GAAA9E,KAAA+C,KAAAwB,UAAAO,OAAA,EAAA9E,KAAAoP,UACAtK,MAAA,EACAA,EAAAkC,KAAAyI,IAAA,GAAAjL,EAAAM,EACA,IAAA4K,GAAAlL,EAAA,EACAmL,EAAA7K,EAAA,CAEA9E,MAAA+C,KAAAK,MACAE,EAAAoM,EAAA1P,KAAAoP,WAAA,GAGA,IAAAzC,IAAArJ,EAAAoM,EAAA1K,EAAA2K,GACAhF,IACArH,EAAAoM,EAAAlL,EAAA,EAAAQ,EAAA2K,EAAA7K,EAAA,IACAxB,EAAAoM,EAAAlL,EAAA,EAAAA,EAAA,EAAAQ,EAAA2K,EAAA7K,EAAA,EAAAA,EAAA,IACAxB,EAAAoM,EAAAlL,EAAA,EAAAA,EAAAQ,EAAA2K,EAAA7K,EAAA,IACAxB,EAAAoM,EAAAlL,EAAA,EAAAA,EAAA,EAAAQ,EAAA2K,EAAA7K,EAAA,EAAAA,EAAA,IACAxB,EAAAoM,EAAAlL,EAAA,EAAAQ,EAAA2K,EAAA7K,EAAA,IAGAzC,EAAAoI,EAAArI,EAAAuK,EAAAhC,EAEAtI,GAAAe,MACAwB,OAAA5E,KAAAmD,QAAA,iBACA0B,eAAA7E,KAAAmD,QAAA,cACAI,KAAAvD,KAAAmD,QAAA,UAEAnC,EAAA8C,MAAAzB,EAAAe,KAAA,OAAApC,EAAA8C,MACA9C,EAAA+C,QAAA1B,EAAAe,KAAA,SAAApC,EAAA+C,QACA/C,EAAAgC,MAAAX,EAAAY,KAAA3C,GAAAU,EAAAgC,KACAX,EAAAY,KAAAC,aAAA,QAAAlD,KAAAmD,QAAA,UAEAnD,KAAA+C,KAAAK,MACA4B,EAAA3C,EAAAkC,UAAAO,OAAA,IAGA9E,KAAAsC,MAAAoC,KAAArC,GACAA,EAAA0C,aAAA/E,KAAA+C,MAEA/C,KAAAiF,aA/EA,GAAA9C,GAAAhC,EAAA,GACA+B,EAAA/B,EAAA,GAAA+B,SACAgD,EAAA/E,EAAA,GACAsK,EAAAvF,EAAAuF,QA8EAvI,GAAAoL,EAAAnL,GAEAmL,EAAA7L,UAAA6E,OAAA,WAEAtG,KAAAqP,gBACArP,UAAAqP,cAAA,WAAArP,KAAA4P,YAGA5P,KAAAsP,eACAtP,UAAAsP,aAAA,WAAAtP,KAAA6P,UAGA,IAAAtJ,GAAAvG,KAAAmD,QAAA,cAEA,IAAAnD,KAAA8P,cAAA,CACA,GAAA5I,GAAAlH,KAAAmG,WAEAnG,MAAA8P,cAAArJ,eACAzG,KAAA8P,cAAA9J,OAAAhG,KAAA6F,OAAA7F,KAAA8E,OAAAyB,GACAvG,KAAA8P,cAAA/J,KAAAmB,EAAA5D,EAAAtD,KAAA8P,cAAAtL,MAAA,GACAxE,KAAA8P,cAAArJ,cAAA,EAEAzG,KAAA8P,cAAAxJ,UAIA,GAAAtG,KAAA+P,aAAA,CACA,GAAAvJ,GAAAxG,KAAAqG,UAEA,KAAArG,KAAA+P,aAAAtJ,aAAA,CAEAzG,KAAA+P,aAAA9J,KAAAO,EAAAxB,EAAAhF,KAAA+P,aAAAjL,OAAA,GACA9E,KAAA+P,aAAAjK,OAAA9F,KAAAsC,MAAAiC,UAAAjB,EAAAtD,KAAAwE,MAAA+B,EAEA,IAAAG,GAAA1G,MACA,QAAA2G,KAGA,OADAC,GADAC,GAAA,EAEA9G,EAAA,EAAA+G,EAAAJ,EAAAtE,MAAAqD,QAAApB,OAAAyC,EAAA/G,MAAA,CACA6G,EAAAF,EAAAtE,MAAAqD,QAAA1F,EAEA,IAAAgH,GAAAC,KAAAC,IAAAL,EAAAjB,YAAArC,EAAAoD,EAAAqJ,aAAApK,YAAArC,EACA,IAAAsD,EAAAjB,YAAAX,EAAA0B,EAAAqJ,aAAApK,YAAAX,GAAA+B,GAAAL,EAAAqJ,aAAAvL,MAAA,GACAqC,GAAA,CACA,QAIAA,IACAH,EAAAqJ,aAAAhK,KAAAa,EAAAhB,OAAAgB,EAAApC,MAAA+B,GACAI,QAIA3G,KAAA+P,aAAAtJ,cAAA,EAEAzG,KAAA+P,aAAAzJ,YAKAgH,EAAA7L,UAAA0F,YAAA,WACAnH,KAAA4P,YACA5P,KAAAoH,WAAApH,KAAA4P,WAAA5P,KAAAmD,QAAA,YAAAnD,KAAAqP,eAGArP,KAAA6P,WACA7P,KAAAoH,WAAApH,KAAA6P,UAAA7P,KAAAmD,QAAA,WAAAnD,KAAAsP,eAIA5P,EAAAD,QAAA6N,GP+gCM,SAAS5N,EAAQD,EAASU,GQlqChC,QAAAU,GAAAgM,EAAA7L,GACAA,QAEAhB,KAAAuC,MAAA,GAAAyN,GAAAnD,GAEA7M,KAAAgB,QAAAiB,EAAAjB,EAAAC,GAEAjB,KAAAyF,WACAzF,KAAAiJ,SACAjJ,KAAA2M,MAAA,KAdA,GAAAqD,GAAA7P,EAAA,IACA8B,EAAA9B,EAAA,GAAA8B,SACAhB,EAAAd,EAAA,GACAmN,EAAAnN,EAAA,EAcAU,GAAAY,UAAAwO,OAAA,SAAA5N,GACArC,KAAAyF,QAAA6B,QAAAjF,IAAA,IACArC,KAAAyF,QAAAf,KAAArC,EAGA,IAAA6N,GAAAlQ,IAyBA,OAvBAqC,aAAA,IACAA,EAAA0L,IAAA,SAAAoC,GAKA,MAJA9N,GAAAuN,WAAAO,EACA9N,EAAAwN,YACAxN,EAAAyL,QAAA,GAEAoC,EAAAD,OAAAE,IAEA9N,EAAA2L,GAAA,SAAAmC,GAKA,MAJA9N,GAAAwN,UAAAM,EACA9N,EAAAuN,aACAvN,EAAAyL,QAAA,GAEAoC,EAAAD,OAAAE,KAGA9N,EAAA4L,KAAA,SAAAkC,GAGA,MAFA9N,GAAAQ,KAAAsN,EACA9N,EAAAyL,QAAA,EACAoC,EAAAD,OAAAE,IAIA9N,GAGAxB,EAAAY,UAAAoM,UAAA,SAAAxL,GAEA,MADArC,MAAA2M,MAAAtK,EACArC,KAAAiQ,OAAA5N,IAGAxB,EAAAY,UAAA6E,OAAA,WACA,GAMAjE,GANA2B,EAAA,EACAoM,EAAA,EACArQ,EAAA,EACA+G,EAAA,EACAwB,EAAA,EACA+H,EAAA,CAGA,KAAAtQ,EAAA,EAAA+G,EAAA9G,KAAAyF,QAAApB,OAAAyC,EAAA/G,MACAsC,EAAArC,KAAAyF,QAAA1F,GACAsC,EAAAmC,MAAAR,IACAA,EAAA3B,EAAAmC,OAEAnC,EAAAyC,OAAAsL,IACAA,EAAA/N,EAAAyC,OAIA,KAAA/E,EAAA,EAAA+G,EAAA9G,KAAAyF,QAAApB,OAAAyC,EAAA/G,MACAsC,EAAArC,KAAAyF,QAAA1F,GACAsC,EAAAyD,OAAA9F,KAAAgB,QAAAsC,GAAAU,EAAA3B,EAAAmC,OAAA,EAAAxE,KAAAgB,QAAA,eACAqB,EAAA2D,OAAAhG,KAAAgB,QAAAgE,GAAAoL,EAAA/N,EAAAyC,QAAA,EAAA9E,KAAAgB,QAAA,cASA,KANAhB,KAAA2M,MAAArG,SAMAvG,EAAA,EAAA+G,EAAA9G,KAAAyF,QAAApB,OAAAyC,EAAA/G,MACAsC,EAAArC,KAAAyF,QAAA1F,GACAsC,EAAA8E,aAKA,KAFAmB,EAAAtI,KAAAwK,aAEAzK,EAAA,EAAA+G,EAAA9G,KAAAyF,QAAApB,OAAAyC,EAAA/G,MAAA,CACAsC,EAAArC,KAAAyF,QAAA1F,EACA,IAAAuD,GAAAjB,EAAAuD,OAAAvD,EAAAmC,MACAQ,EAAA3C,EAAAwD,OAAAxD,EAAAyC,MACAxB,GAAAgF,IACAA,EAAAhF,GAEA0B,EAAAqL,IACAA,EAAArL,GAIA,GAAAsL,GAAAtQ,KAAAgB,QAAA,MACAuP,EAAAvQ,KAAAgB,QAAA,aACAhB,MAAAuC,MAAAiO,QAAAlI,EAAAgI,EAAAC,EAAAD,EAAAD,EAAAC,EAAAC,EAAAD,GACAtQ,KAAAuC,MAAAkO,WAAA,IAAAnI,EAAAiI,EAAAF,EAAAE,GAAA,IAGA1P,EAAAY,UAAA+L,MAAA,WACA,GAAAxN,KAAAuC,MAAA,CACA,GAAAmO,GAAA1Q,KAAAuC,MAAAoO,MACAD,GAAAE,WAAAC,YAAAH,KAIAhR,EAAAD,QAAAoB,GRirCM,SAASnB,EAAQD,GStyCvBC,EAAAD,SACA6D,EAAA,EACA0B,EAAA,EACA8L,aAAA,EACAC,cAAA,GACAC,cAAA,GACAxN,YAAA,GACAyN,aAAA,QAIAC,aAAA,QACAC,gBAAA,QACA5N,KAAA,QACA6N,WAAA,MACAC,UAAA,KACApG,YAAA,QACAqG,QAAA,YACAhB,MAAA,EACA7K,SACAkH,SACA4E,OACAC,aACAC,eACAC,aACAC,iBTyzCM,SAASjS,EAAQD,GUl1CvBmS,MAAAnQ,UAAA6F,UACAsK,MAAAnQ,UAAA6F,QAAA,SAAAuK,GACA,YACA,WAAA7R,KACA,SAAA8R,UAEA,IAAAC,GAAAxQ,OAAAvB,MACA8G,EAAAiL,EAAA1N,SAAA,CACA,QAAAyC,EACA,QAEA,IAAAkL,GAAA,CASA,IARAC,UAAA5N,OAAA,IACA2N,EAAAE,OAAAD,UAAA,IACAD,KACAA,EAAA,EACA,IAAAA,MAAAG,KAAAH,KAAAG,OACAH,KAAA,OAAAhL,KAAAoL,MAAApL,KAAAC,IAAA+K,MAGAA,GAAAlL,EACA,QAGA,KADA,GAAAuL,GAAAL,GAAA,EAAAA,EAAAhL,KAAAyI,IAAA3I,EAAAE,KAAAC,IAAA+K,GAAA,GACAlL,EAAAuL,MACA,GAAAA,IAAAN,MAAAM,KAAAR,EACA,MAAAQ,EAGA,YAKAT,MAAAnQ,UAAA6Q,cACAV,MAAAnQ,UAAA6Q,YAAA,SAAAT,GACA,YACA,WAAA7R,KACA,SAAA8R,UAEA,IAAAC,GAAAxQ,OAAAvB,MACA8G,EAAAiL,EAAA1N,SAAA,CACA,QAAAyC,EACA,QAEA,IAAAkL,GAAAlL,CACAmL,WAAA5N,OAAA,IACA2N,EAAAE,OAAAD,UAAA,IACAD,KACAA,EAAA,EACA,IAAAA,MAAA,KAAAA,KAAA,OACAA,KAAA,OAAAhL,KAAAoL,MAAApL,KAAAC,IAAA+K,KAIA,KADA,GAAAK,GAAAL,GAAA,EAAAhL,KAAAuL,IAAAP,EAAAlL,EAAA,GAAAA,EAAAE,KAAAC,IAAA+K,GACAK,GAAA,EAAAA,IACA,GAAAA,IAAAN,MAAAM,KAAAR,EACA,MAAAQ,EAGA,YAIAG,OAAA/Q,UAAAiL,OACA8F,OAAA/Q,UAAAiL,KAAA,WACA,MAAA1M,MAAAsO,QAAA,oBV81CM,SAAS5O,EAAQD,EAASU,GW95ChC,QAAA+M,GAAA9K,EAAApB,GACA,GAAAqB,GAAAD,EAAAG,MAAAkQ,KAAA,WACAzR,SACAA,EAAA+B,KAAA/B,EAAA+B,MAAA,MACAZ,EAAA3B,KAAAR,KAAAoC,EAAApB,EAAAqB,GAPA,GAAAF,GAAAhC,EAAA,GACA+B,EAAA/B,EAAA,GAAA+B,QAQAA,GAAAgL,EAAA/K,GAEAzC,EAAAD,QAAAyN,GX26CM,SAASxN,EAAQD,EAASU,GYj7ChC,QAAAiN,GAAAhL,EAAApB,GACAA,QACAmB,EAAA3B,KAAAR,KAAAoC,EAAApB,GACAhB,KAAAoP,WAAApP,KAAAmD,QAAA,eAEAnD,KAAA+C,KAAAK,MACAE,EAAA,EAAAtD,KAAAoP,YAGA,IAAA5K,GAAAxE,KAAA+C,KAAAwB,UAAAC,MAAA,EAAAxE,KAAAoP,WACAtK,EAAA9E,KAAA+C,KAAAwB,UAAAO,OAAA,EAAA9E,KAAAoP,WACAM,EAAA1P,KAAAoP,WACAO,EAAA7K,EAAA,EAEA6H,GAAArJ,EAAAoM,EAAA1K,EAAA2K,GACAhF,IACArH,EAAAoM,EAAA1P,KAAAoP,WAAApK,EAAAF,IACAxB,EAAAoM,EAAA1P,KAAAoP,WAAA5K,EAAAQ,EAAAF,IACAxB,EAAAoM,EAAA1P,KAAAoP,WAAA5K,EAAA,EAAAxE,KAAAoP,WAAApK,EAAA,IACA1B,EAAAoM,EAAA1P,KAAAoP,WAAA,EAAApP,KAAAoP,WAAApK,EAAA,IACA1B,EAAAoM,EAAA1K,EAAA2K,IAGAtN,EAAAoI,EAAArI,EAAAuK,EAAAhC,EAEAtI,GAAAe,MACAwB,OAAA5E,KAAAmD,QAAA,iBACA0B,eAAA7E,KAAAmD,QAAA,cACAI,KAAAvD,KAAAmD,QAAA,UAEAnC,EAAA8C,MAAAzB,EAAAe,KAAA,OAAApC,EAAA8C,MACA9C,EAAA+C,QAAA1B,EAAAe,KAAA,SAAApC,EAAA+C,QACA/C,EAAAgC,MAAAX,EAAAY,KAAA3C,GAAAU,EAAAgC,KACAX,EAAAY,KAAAC,aAAA,QAAAlD,KAAAmD,QAAA,UAEAnD,KAAA+C,KAAAK,MACA4B,EAAA3C,EAAAkC,UAAAO,OAAA,IAGA9E,KAAAsC,MAAAoC,KAAArC,GACAA,EAAA0C,aAAA/E,KAAA+C,MAEA/C,KAAAiF,aA/CA,GAAA9C,GAAAhC,EAAA,GACA+B,EAAA/B,EAAA,GAAA+B,SACAgD,EAAA/E,EAAA,GACAsK,EAAAvF,EAAAuF,QA8CAvI,GAAAkL,EAAAjL,GAEAiL,EAAA3L,UAAA2E,QAAA,WACA,GAAApB,GAAAhF,KAAA6F,OAAA7F,KAAAsC,MAAAiC,UAAAO,OAAA,EACAxB,EAAAtD,KAAA4F,OAAA5F,KAAAoP,UACA,QAAA9L,IAAA0B,MAGAoI,EAAA3L,UAAA4E,SAAA,WACA,GAAArB,GAAAhF,KAAA6F,OAAA7F,KAAAsC,MAAAiC,UAAAO,OAAA,EACAxB,EAAAtD,KAAA4F,OAAA5F,KAAAsC,MAAAiC,UAAAC,MAAAxE,KAAAoP,UACA,QAAA9L,IAAA0B,MAGAtF,EAAAD,QAAA2N,GZg8CM,SAAS1N,EAAQD,EAASU,Ga5/ChC,QAAAgN,GAAA/K,EAAApB,GACA,GAAAqB,GAAAD,EAAAG,MAAAkQ,KAAA,QACAzR,SACAmB,EAAA3B,KAAAR,KAAAoC,EAAApB,EAAAqB,GANA,GAAAF,GAAAhC,EAAA,GACA+B,EAAA/B,EAAA,GAAA+B,QAOAA,GAAAiL,EAAAhL,GAEAzC,EAAAD,QAAA0N,GbygDM,SAASzN,EAAQD,EAASU,GchhDhC,QAAA6M,GAAA5K,EAAApB,GACA,GAAAqB,GAAAD,EAAAG,MAAAkQ,KAAA,WACAzR,SACAA,EAAA+B,KAAA/B,EAAA+B,MAAA,QACAZ,EAAA3B,KAAAR,KAAAoC,EAAApB,EAAAqB,GAPA,GAAAF,GAAAhC,EAAA,GACA+B,EAAA/B,EAAA,GAAA+B,QAQAA,GAAA8K,EAAA7K,GAEAzC,EAAAD,QAAAuN,GdojDM,SAAStN,EAAQD,EAASU,Ge5jDhC,QAAAkN,GAAAjL,EAAApB,GACA,GAAAqB,GAAAD,EAAAG,MAAAkQ,KAAA,QACAzR,SACAmB,EAAA3B,KAAAR,KAAAoC,EAAApB,EAAAqB,GAEAA,EAAAe,MACAoB,MAAAxE,KAAA+C,KAAAwB,UAAAC,MAAA,EAAAxE,KAAAmD,QAAA,iBAGAnD,KAAA+C,KAAAK,MACAE,EAAA,EAAAtD,KAAAmD,QAAA,gBAGA,IAAAuP,GAAAtQ,EAAAG,MAAAkQ,KAAA,QACAC,GAAAtP,MACAE,EAAAtD,KAAAmD,QAAA,eACAyB,OAAA5E,KAAAmD,QAAA,iBACA0B,eAAA7E,KAAAmD,QAAA,cACAqB,MAAAxE,KAAA+C,KAAAwB,UAAAC,MAAA,EAAAxE,KAAAmD,QAAA,eACA2B,OAAA9E,KAAA+C,KAAAwB,UAAAO,OAAA,EAAA9E,KAAAmD,QAAA,eACAI,KAAAvD,KAAAmD,QAAA,UAEAnC,EAAAgC,MAAA0P,EAAAzP,KAAA3C,GAAAU,EAAAgC,IAAA,IAEA,IAAAS,GAAAzD,KAAAmD,QAAA,QACAO,EAAA1D,KAAAmD,QAAA,eACAQ,EAAA3D,KAAAmD,QAAA,cAEAM,IAAAiP,EAAAtP,MAAAK,SACAC,GAAAgP,EAAAtP,MAAAQ,cAAAF,IACAC,GAAA+O,EAAAtP,MAAAS,cAAAF,IAEA3C,EAAA8C,MAAA4O,EAAAtP,KAAA,OAAApC,EAAA8C,MACA9C,EAAA+C,QAAA2O,EAAAtP,KAAA,SAAApC,EAAA+C,QACA/D,KAAAsC,MAAAoC,KAAAgO,GACAA,EAAA3N,aAAA/E,KAAA+C,MAEA/C,KAAAiF,aAxCA,GAAA9C,GAAAhC,EAAA,GACA+B,EAAA/B,EAAA,GAAA+B,QAyCAA,GAAAmL,EAAAlL,GAEAzC,EAAAD,QAAA4N,GfykDM,SAAS3N,EAAQD,EAASU,GgBrnDhC,sBAAAwS,QAAA,CACA,GAAA/R,GAAAT,EAAA,IACA,SAAAyS,GACAA,EAAAC,GAAA3C,UAAA,SAAAlP,GACA,MAAAhB,MAAA8S,KAAA,WACA,GAAAC,GAAAH,EAAA5S,MACAoC,EAAAxB,EAAAmS,EAAAhQ,OACAgQ,GAAAC,KAAA,IACA5Q,EAAAwK,QAAA5M,KAAAgB,OAGA2R,UhBgoDM,SAASjT,EAAQD,GiB3oDvBC,EAAAD,QAAAQ","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","// flowchart, v1.4.2\n// Copyright (c)yyyy Adriano Raiano (adrai).\n// Distributed under MIT license\n// http://adrai.github.io/flowchart.js\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.FlowChart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0];\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t symbol;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n\t this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})( jQuery ); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 3956c0fd3abd37421728\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.FlowChart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n symbol;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})( jQuery ); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.map b/release/flowchart.min.map deleted file mode 100644 index 451433c6..00000000 --- a/release/flowchart.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"flowchart.min.js","sources":["../bin/flowchart-latest.js"],"names":["_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","drawPath","chart","location","points","i","len","path","length","pathValues","x","y","push","symbol","paper","attr","font","fontF","fontW","font-family","font-weight","drawLine","from","to","text","toString","call","line","stroke","stroke-width","arrow-end","centerText","textPath","isHorizontal","firstTo","getBBox","width","height","text-anchor","font-size","fill","checkLineIntersection","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","a","b","numerator1","numerator2","result","onLine1","onLine2","FlowChart","container","this","Raphael","f","defaults","o","symbols","lines","start","Symbol","group","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","key","node","id","setAttribute","getAttr","link","target","maxWidth","words","split","tempText","ii","word","substring","tmpMargin","insertBefore","initialize","Start","rect","End","Operation","Subroutine","innerWrap","InputOutput","textMargin","startX","startY","Condition","yes_direction","no_direction","yes","no","Math","max","parse","input","getSymbol","s","startIndex","indexOf","endIndex","getNextPath","flowSymb","trim","drawSVG","getDisplaySymbol","dispSymbols","diagram","Error","self","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","then","render","prevBreak","i0","i0len","line0","replace","substr","l","currentLine","splice","sub","parts","shift","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","abs","k","lastIndexOf","min","String","root","flowchart","module","exports","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","scale","end","condition","inputoutput","operation","subroutine","inherits","handle","flowChart","nextSymbol","yes_symbol","no_symbol","maxHeight","maxX","maxY","shiftX","shiftY","renderLines","maxXFromLine","getX","getY","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","attName","opt1","opt3","opt2","transform","getCenter","setX","setY","getTop","getBottom","getLeft","getRight","lineLength","rightPoint","isPositioned","symb","hasSymbolUnder","diff","bottomPoint","drawLineTo","origin","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","llen","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","newSegment","bottom_symbol","right_symbol"],"mappings":"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"} \ No newline at end of file diff --git a/release/flowchart.zip b/release/flowchart.zip deleted file mode 100644 index 5b4b0a0d8e51d575d389314aff8b9a8234381a90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28372 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 diff --git a/src/flowchart.functions.js b/src/flowchart.functions.js index 3e3470cf..23c62a86 100644 --- a/src/flowchart.functions.js +++ b/src/flowchart.functions.js @@ -13,7 +13,7 @@ function drawPath(chart, location, points) { symbol.attr('stroke', chart.options['element-color']); symbol.attr('stroke-width', chart.options['line-width']); - var font = chart.options['font']; + var font = chart.options.font; var fontF = chart.options['font-family']; var fontW = chart.options['font-weight']; @@ -48,7 +48,7 @@ function drawLine(chart, from, to, text) { 'arrow-end': chart.options['arrow-end'] }); - var font = chart.options['font']; + var font = chart.options.font; var fontF = chart.options['font-family']; var fontW = chart.options['font-weight']; diff --git a/src/flowchart.symbol.condition.js b/src/flowchart.symbol.condition.js index 57944e47..27cb5c7c 100644 --- a/src/flowchart.symbol.condition.js +++ b/src/flowchart.symbol.condition.js @@ -9,16 +9,16 @@ function Condition(chart, options) { this.textMargin = this.getAttr('text-margin'); this.yes_direction = 'bottom'; this.no_direction = 'right'; - if (options.yes && options['direction_yes'] && options.no && !options['direction_no']) { - if (options['direction_yes'] === 'right') { + if (options.yes && options.direction_yes && options.no && !options.direction_no) { + if (options.direction_yes === 'right') { this.no_direction = 'bottom'; this.yes_direction = 'right'; } else { this.no_direction = 'right'; this.yes_direction = 'bottom'; } - } else if (options.yes && !options['direction_yes'] && options.no && options['direction_no']) { - if (options['direction_no'] === 'right') { + } else if (options.yes && !options.direction_yes && options.no && options.direction_no) { + if (options.direction_no === 'right') { this.yes_direction = 'bottom'; this.no_direction = 'right'; } else { diff --git a/webpack.config.js b/webpack.config.js index 39a2084d..1905727d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,7 +1,14 @@ var path = require('path'); var webpack = require('webpack'); +var moment = require('moment'); + +var component = require('./package.json'); +var banner = + '// ' + component.name + ', v' + component.version + '\n' + + '// Copyright (c)' + moment().format('yyyy') + ' Adriano Raiano (adrai).\n' + + '// Distributed under MIT license\n' + + '// http://adrai.github.io/flowchart.js\n'; -var bundlename = 'flowchart'; var NODE_ENV = process.env.NODE_ENV || 'development'; var defines = new webpack.DefinePlugin({ 'process.env': { @@ -10,13 +17,14 @@ var defines = new webpack.DefinePlugin({ }); var config = { + devtool: 'source-map', // always build source map entry: [ 'webpack-hot-middleware/client', './index' ], output: { path: path.join(__dirname, 'build'), - filename: bundlename + '.js', + filename: component.name + '.js', publicPath: '/build/' }, plugins: [ @@ -24,19 +32,6 @@ var config = { new webpack.NoErrorsPlugin(), defines ], - module: { - loaders: [ - { - test: /\.json$/, - loader: 'json' - }, - { - test: /\.js$/, - loader: 'babel', - exclude: /node_modules/ - } - ] - }, resolve: { extensions: ['', '.js'], modulesDirectories: ['src', 'node_modules'], @@ -49,15 +44,11 @@ var config = { } }; -if (NODE_ENV === 'development') { - config.devtool = 'source-map'; -} - if (NODE_ENV === 'production') { var minified = process.env.MINIFIED == '1'; - var filename = minified ? bundlename + '-min.js' : bundlename + '.js'; + var filename = minified ? component.name + '.min.js' : component.name + '.js'; var uglifyOptions = { - sourceMap: false, + sourceMap: true, comments: false, compressor: { warnings: false, @@ -65,7 +56,6 @@ if (NODE_ENV === 'production') { } }; if (!minified) { - uglifyOptions.sourceMap = true; uglifyOptions.beautify = true; uglifyOptions.mangle = false; uglifyOptions.comments = 'all'; @@ -75,10 +65,14 @@ if (NODE_ENV === 'production') { raphael: 'Raphael' }; config.output = { + devtoolLineToLine: true, + sourceMapFilename: filename + '.map', path: path.join(__dirname, 'release'), - filename: filename + filename: filename, + libraryTarget: 'umd' }; config.plugins = [ + new webpack.BannerPlugin(banner, { raw: true, entryOnly: true }), new webpack.optimize.OccurenceOrderPlugin(), defines, new webpack.optimize.UglifyJsPlugin(uglifyOptions) From 9b9087ca751adc854f2f7580da99ae96e5787240 Mon Sep 17 00:00:00 2001 From: sergeyt Date: Thu, 14 Jan 2016 21:43:12 +0600 Subject: [PATCH 010/117] use uglify preamble to keep license block in minified artifact --- release/flowchart.js | 1 + release/flowchart.js.map | 2 +- release/flowchart.min.js | 5 +++++ release/flowchart.min.js.map | 2 +- webpack.config.js | 8 +++++--- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/release/flowchart.js b/release/flowchart.js index 8a79161f..42556e58 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -2,6 +2,7 @@ // Copyright (c)yyyy Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js + !function(root, factory) { if ("object" == typeof exports && "object" == typeof module) module.exports = factory(require("Raphael")); else if ("function" == typeof define && define.amd) define([ "Raphael" ], factory); else { var a = factory("object" == typeof exports ? require("Raphael") : root.Raphael); diff --git a/release/flowchart.js.map b/release/flowchart.js.map index a929c3e0..9721120f 100644 --- a/release/flowchart.js.map +++ b/release/flowchart.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 30f32d336fe3b803c43a","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","// flowchart, v1.4.2\n// Copyright (c)yyyy Adriano Raiano (adrai).\n// Distributed under MIT license\n// http://adrai.github.io/flowchart.js\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.FlowChart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0];\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t symbol;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n\t this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})( jQuery ); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 30f32d336fe3b803c43a\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.FlowChart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n symbol;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})( jQuery ); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 30f32d336fe3b803c43a","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.FlowChart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0];\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t symbol;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n\t this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})( jQuery ); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 30f32d336fe3b803c43a\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.FlowChart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n symbol;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})( jQuery ); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index 1912f913..680f03b5 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,2 +1,7 @@ +// flowchart, v1.4.2 +// Copyright (c)yyyy Adriano Raiano (adrai). +// Distributed under MIT license +// http://adrai.github.io/flowchart.js + !function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(8);var r=e(4);e(14);var s={parse:r};"undefined"!=typeof window&&(window.FlowChart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),o=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var n=this.getAttr("maxWidth");if(n){for(var h=i.text.split(" "),a="",x=0,y=h.length;y>x;x++){var l=h[x];this.text.attr("text",a+" "+l),a+=this.text.getBBox().width>n?"\n"+l:" "+l}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*g,height:this.text.getBBox().height+2*g}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),o=s.drawLine,n=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function s(){for(var i,r=!1,o=0,n=e.chart.symbols.length;n>o;o++){i=e.chart.symbols[o];var h=Math.abs(i.getCenter().x-e.next.getCenter().x);if(i.getCenter().y>e.next.getCenter().y&&h<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),s())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,"",this.next_direction):this.drawLineTo(this.next))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),y=this.getLeft(),l=t.getCenter().x,g=t.getCenter().y,f=t.getTop(),p=t.getRight(),c=t.getLeft(),u=s===l,d=h===g,m=g>h,b=h>g,v=s>l,w=l>s,k=0,_=this.getAttr("line-length"),B=this.getAttr("line-width");if(e&&"bottom"!==e||!u||!m)if(e&&"right"!==e||!d||!w)if(e&&"left"!==e||!d||!v)if(e&&"right"!==e||!u||!b)if(e&&"right"!==e||!u||!m)if(e&&"bottom"!==e||!v)if(e&&"bottom"!==e||!w)if(e&&"right"===e&&v)r=o(this.chart,a,[{x:a.x+_/2,y:a.y},{x:a.x+_/2,y:f.y-_/2},{x:f.x,y:f.y-_/2},{x:f.x,y:f.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+_/2;else if(e&&"right"===e&&w)r=o(this.chart,a,[{x:f.x,y:a.y},{x:f.x,y:f.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+_/2;else if(e&&"bottom"===e&&u&&b)r=o(this.chart,x,[{x:x.x,y:x.y+_/2},{x:a.x+_/2,y:x.y+_/2},{x:a.x+_/2,y:f.y-_/2},{x:f.x,y:f.y-_/2},{x:f.x,y:f.y}],i),this.bottomStart=!0,t.topEnd=!0,k=x.x+_/2;else if("left"===e&&u&&b){var A=y.x-_/2;c.xL;L++)for(var O,X=this.chart.lines[L],T=X.attr("path"),Y=r.attr("path"),C=0,S=T.length-1;S>C;C++){var j=[];j.push(["M",T[C][1],T[C][2]]),j.push(["L",T[C+1][1],T[C+1][2]]);for(var E=j[0][1],z=j[0][2],P=j[1][1],R=j[1][2],F=0,I=Y.length-1;I>F;F++){var W=[];W.push(["M",Y[F][1],Y[F][2]]),W.push(["L",Y[F+1][1],Y[F+1][2]]);var N=W[0][1],V=W[0][2],q=W[1][1],G=W[1][2],Q=n(E,z,P,R,N,V,q,G);if(Q.onLine1&&Q.onLine2){var $;V===G?N>q?($=["L",Q.x+2*B,V],Y.splice(F+1,0,$),$=["C",Q.x+2*B,V,Q.x,V-4*B,Q.x-2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",Q.x-2*B,V],Y.splice(F+1,0,$),$=["C",Q.x-2*B,V,Q.x,V-4*B,Q.x+2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):V>G?($=["L",N,Q.y+2*B],Y.splice(F+1,0,$),$=["C",N,Q.y+2*B,N+4*B,Q.y,N,Q.y-2*B],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",N,Q.y-2*B],Y.splice(F+1,0,$),$=["C",N,Q.y-2*B,N+4*B,Q.y,N,Q.y+2*B],Y.splice(F+2,0,$),r.attr("path",Y)),F+=2,O+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,o="M{0},{1}";for(r=2,s=2*e.length+2;s>r;r+=2)o+=" L{"+r+"},{"+(r+1)+"}";var n=[i.x,i.y];for(r=0,s=e.length;s>r;r++)n.push(e[r].x),n.push(e[r].y);var h=t.paper.path(o,n);h.attr("stroke",t.options["element-color"]),h.attr("stroke-width",t.options["line-width"]);var a=t.options.font,x=t.options["font-family"],y=t.options["font-weight"];return a&&h.attr({font:a}),x&&h.attr({"font-family":x}),y&&h.attr({"font-weight":y}),h}function r(t,i,e,r){var s,o;"[object Array]"!==Object.prototype.toString.call(e)&&(e=[e]);var n="M{0},{1}";for(s=2,o=2*e.length+2;o>s;s+=2)n+=" L{"+s+"},{"+(s+1)+"}";var h=[i.x,i.y];for(s=0,o=e.length;o>s;s++)h.push(e[s].x),h.push(e[s].y);var a=t.paper.path(n,h);a.attr({stroke:t.options["line-color"],"stroke-width":t.options["line-width"],"arrow-end":t.options["arrow-end"]});var x=t.options.font,y=t.options["font-family"],l=t.options["font-weight"];if(x&&a.attr({font:x}),y&&a.attr({"font-family":y}),l&&a.attr({"font-weight":l}),r){var g=!1,f=t.paper.text(0,0,r),p=!1,c=e[0];i.y===c.y&&(p=!0);var u=0,d=0;g?(u=i.x>c.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"])),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),y&&f.attr({"font-family":y}),l&&f.attr({"font-weight":l})}return a}function s(t,i,e,r,s,o,n,h){var a,x,y,l,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-o)*(e-t)-(n-s)*(r-i),0===a?f:(x=i-o,y=t-s,l=(n-s)*x-(h-o)*y,g=(e-t)*x-(r-i)*y,x=l/a,y=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&1>x&&(f.onLine1=!0),y>0&&1>y&&(f.onLine2=!0),f)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?r.symbols[t.substring(0,i-1)]:r.symbols[t]}function e(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=X.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var r={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(l,t);break;case"end":g[t.key]=new n(l,t);break;case"operation":g[t.key]=new h(l,t);break;case"inputoutput":g[t.key]=new a(l,t);break;case"subroutine":g[t.key]=new x(l,t);break;case"condition":g[t.key]=new y(l,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var l=new s(t,i);this.diagram=l;var g={};!function f(t,i,s){var o=e(t);return r.start===t?l.startWith(o):i&&s&&!i.pathOk&&(i instanceof y?(s.yes===t&&i.yes(o),s.no===t&&i.no(o)):i.then(o)),o.pathOk?o:(o instanceof y?(t.yes&&f(t.yes,o,t),t.no&&f(t.no,o,t)):t.next&&f(t.next,o,t),o)}(this.start),l.render()},clean:function(){this.diagram.clean()}},l=[],g=0,f=1,p=t.length;p>f;f++)if("\n"===t[f]&&"\\"!==t[f-1]){var c=t.substring(g,f);g=f+1,l.push(c.replace(/\\\n/g,"\n"))}gu;){var m=l[u];m.indexOf("->")<0&&m.indexOf("=>")<0?(l[u-1]+="\n"+m,l.splice(u,1),d--):u++}for(;l.length>0;){var b=l.splice(0,1)[0];if(b.indexOf("=>")>=0){var v,w=b.split("=>"),k={key:w[0],symbolType:w[1],text:null,link:null,target:null,flowstate:null};if(k.symbolType.indexOf(": ")>=0&&(v=k.symbolType.split(": "),k.symbolType=v.shift(),k.text=v.join(": ")),k.text&&k.text.indexOf(":>")>=0?(v=k.text.split(":>"),k.text=v.shift(),k.link=v.join(":>")):k.symbolType.indexOf(":>")>=0&&(v=k.symbolType.split(":>"),k.symbolType=v.shift(),k.link=v.join(":>")),k.symbolType.indexOf("\n")>=0&&(k.symbolType=k.symbolType.split("\n")[0]),k.link){var _=k.link.indexOf("[")+1,B=k.link.indexOf("]");_>=0&&B>=0&&(k.target=k.link.substring(_,B),k.link=k.link.substring(0,_-1))}if(k.text&&k.text.indexOf("|")>=0){var A=k.text.split("|");k.flowstate=A.pop().trim(),k.text=A.join("|")}r.symbols[k.key]=k}else if(b.indexOf("->")>=0)for(var L=b.split("->"),M=0,O=L.length;O>M;M++){var X=L[M],T=i(X),Y=e(X),C=null;if(Y.indexOf(",")>=0){var S=Y.split(",");Y=S[0],C=S[1].trim()}if(r.start||(r.start=T),O>M+1){var j=L[M+1];T[Y]=i(j),T["direction_"+Y]=C,C=null}}}return r}var s=e(6),o=e(12),n=e(9),h=e(11),a=e(10),x=e(13),y=e(5);t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.yes_direction="bottom",this.no_direction="right",i.yes&&i.direction_yes&&i.no&&!i.direction_no?"right"===i.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):(this.no_direction="right",this.yes_direction="bottom"):i.yes&&!i.direction_yes&&i.no&&i.direction_no?"right"===i.direction_no?(this.yes_direction="bottom",this.no_direction="right"):(this.yes_direction="right",this.no_direction="bottom"):(this.yes_direction="bottom",this.no_direction="right"),this.yes_direction=this.yes_direction||"bottom",this.no_direction=this.no_direction||"right",this.text.attr({x:2*this.textMargin});var e=this.text.getBBox().width+3*this.textMargin;e+=e/2;var r=this.text.getBBox().height+2*this.textMargin;r+=r/2,r=Math.max(.5*e,r);var o=e/4,n=r/4;this.text.attr({x:o+this.textMargin/2});var a={x:o,y:n},x=[{x:o-e/4,y:n+r/4},{x:o-e/4+e/2,y:n+r/4+r/2},{x:o-e/4+e,y:n+r/4},{x:o-e/4+e/2,y:n+r/4-r/2},{x:o-e/4,y:n+r/4}],y=h(t,a,x);y.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&y.attr("href",i.link),i.target&&y.attr("target",i.target),i.key&&(y.node.id=i.key),y.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:y.getBBox().height/2}),this.group.push(y),y.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,n=e(3),h=n.drawPath;o(r,s),r.prototype.render=function(){this.yes_direction&&(this[this.yes_direction+"_symbol"]=this.yes_symbol),this.no_direction&&(this[this.no_direction+"_symbol"]=this.no_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.right_symbol){var e=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(e.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var r=this;!function s(){for(var i,e=!1,o=0,n=r.chart.symbols.length;n>o;o++){i=r.chart.symbols[o];var h=Math.abs(i.getCenter().x-r.right_symbol.getCenter().x);if(i.getCenter().y>r.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),s())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=o(i,n),this.symbols=[],this.lines=[],this.start=null}var s=e(15),o=e(1).defaults,n=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i=0,e=0,r=0,s=0,o=0,n=0;for(r=0,s=this.symbols.length;s>r;r++)t=this.symbols[r],t.width>i&&(i=t.width),t.height>e&&(e=t.height);for(r=0,s=this.symbols.length;s>r;r++)t=this.symbols[r],t.shiftX(this.options.x+(i-t.width)/2+this.options["line-width"]),t.shiftY(this.options.y+(e-t.height)/2+this.options["line-width"]);for(this.start.render(),r=0,s=this.symbols.length;s>r;r++)t=this.symbols[r],t.renderLines();for(o=this.maxXFromLine,r=0,s=this.symbols.length;s>r;r++){t=this.symbols[r];var h=t.getX()+t.width,a=t.getY()+t.height;h>o&&(o=h),a>n&&(n=a)}var x=this.options.scale,y=this.options["line-width"];this.paper.setSize(o*x+y*x,n*x+y*x),this.paper.setViewBox(0,0,o+y,n+y,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);e>s;s++)if(s in i&&i[s]===t)return s;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,n=r/2,a={x:o,y:n},x=[{x:o-this.textMargin,y:r},{x:o-this.textMargin+e,y:r},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:n}],y=h(t,a,x);y.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&y.attr("href",i.link),i.target&&y.attr("target",i.target),i.key&&(y.node.id=i.key),y.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:y.getBBox().height/2}),this.group.push(y),y.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,n=e(3),h=n.drawPath;o(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var o=this.getAttr("font"),n=this.getAttr("font-family"),h=this.getAttr("font-weight");o&&r.attr({font:o}),n&&r.attr({"font-family":n}),h&&r.attr({"font-weight":h}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); //# sourceMappingURL=flowchart.min.js.map \ No newline at end of file diff --git a/release/flowchart.min.js.map b/release/flowchart.min.js.map index 22c4e11c..9013def8 100644 --- a/release/flowchart.min.js.map +++ b/release/flowchart.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 3956c0fd3abd37421728","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","// flowchart, v1.4.2\n// Copyright (c)yyyy Adriano Raiano (adrai).\n// Distributed under MIT license\n// http://adrai.github.io/flowchart.js\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.FlowChart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0];\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t symbol;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n\t this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})( jQuery ); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 3956c0fd3abd37421728\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.FlowChart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n symbol;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})( jQuery ); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 3956c0fd3abd37421728","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.FlowChart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0];\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t symbol;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n\t this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})( jQuery ); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 3956c0fd3abd37421728\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.FlowChart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n symbol;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})( jQuery ); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 1905727d..e6202e7c 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -49,16 +49,19 @@ if (NODE_ENV === 'production') { var filename = minified ? component.name + '.min.js' : component.name + '.js'; var uglifyOptions = { sourceMap: true, - comments: false, compressor: { warnings: false, dead_code: true + }, + output: { + preamble: banner, + comments: false } }; if (!minified) { uglifyOptions.beautify = true; uglifyOptions.mangle = false; - uglifyOptions.comments = 'all'; + uglifyOptions.output.comments = 'all'; } config.entry = './index'; config.externals = { @@ -72,7 +75,6 @@ if (NODE_ENV === 'production') { libraryTarget: 'umd' }; config.plugins = [ - new webpack.BannerPlugin(banner, { raw: true, entryOnly: true }), new webpack.optimize.OccurenceOrderPlugin(), defines, new webpack.optimize.UglifyJsPlugin(uglifyOptions) From 44e880e4a1efc02a97fd6c0b0fa4be863aa14636 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Fri, 15 Jan 2016 18:12:38 +0100 Subject: [PATCH 011/117] [#70] new webpack based version --- README.md | 8 +++++++- bower.json | 2 +- example/index.html | 3 +-- index.js | 2 +- license | 2 +- package.json | 6 +++--- release/flowchart.js | 4 ++-- release/flowchart.js.map | 2 +- release/flowchart.min.js | 4 ++-- release/flowchart.min.js.map | 2 +- releasenotes.md | 4 ++++ site | 2 +- src/jquery-plugin.js | 2 +- webpack.config.js | 4 +++- 14 files changed, 29 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 93df042e..6f6adcd7 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,12 @@ On your page you need to include raphael like so: ``` +or + +```node.js +npm install flowchart +``` + and then ```html @@ -89,7 +95,7 @@ Many thanks to [js-sequence-diagrams](http://bramp.github.io/js-sequence-diagram #Licence -Copyright (c) 2015 Adriano Raiano +Copyright (c) 2016 Adriano Raiano Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/bower.json b/bower.json index 8b16609a..4380bd8c 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "flowchart", - "version": "1.4.2", + "version": "1.5.0", "main": "./release/flowchart.min.js", "dependencies": {}, "ignore": [ diff --git a/example/index.html b/example/index.html index 2142b91b..3937c071 100644 --- a/example/index.html +++ b/example/index.html @@ -9,8 +9,7 @@ - - + - + + diff --git a/webpack.config.js b/webpack.config.js index d17b651d..6570660f 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -23,9 +23,9 @@ var config = { './index' ], output: { - path: path.join(__dirname, 'build'), + path: path.join(__dirname, 'release'), filename: component.name + '.js', - publicPath: '/build/' + publicPath: '/release/' }, plugins: [ new webpack.HotModuleReplacementPlugin(), From 45d9364e61a82680b96eae0475809fe2014ffd2b Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Sun, 9 Oct 2016 19:45:03 +0800 Subject: [PATCH 023/117] Add CDNJS CDN info in readme. --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 095b88fa..6d8e5b03 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,9 @@ #Requirements You will need [Raphaël](http://www.raphaeljs.com/) +#CDN +flowchart.js is on [CDNJS](https://cdnjs.com/libraries/flowchart), feel free to use it + #Usage On your page you need to include raphael like so: From 31912474d2ce94159f9205fe9179e2b44b07ead7 Mon Sep 17 00:00:00 2001 From: barry-bookinglive Date: Sun, 30 Oct 2016 14:14:56 +0000 Subject: [PATCH 024/117] Add maxWidth to the example configuration options I spent ages trying to debug your code so that I could control the line length to the right that seems to double after each condition whether there is nesting or not. After about 20 minutes of no luck (code formatting? comments? lol) I found maxWidth and it solved my problem without having to go further. --- example/index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/example/index.html b/example/index.html index 3937c071..192bae9e 100644 --- a/example/index.html +++ b/example/index.html @@ -29,6 +29,7 @@ // 'x': 30, // 'y': 50, 'line-width': 3, + 'maxWidth': 3,//ensures the flowcharts fits within a certian width 'line-length': 50, 'text-margin': 10, 'font-size': 14, From 9bcf37cfd4d5482a45de3e461f3406a14c1c0f66 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Wed, 2 Nov 2016 20:22:34 +0100 Subject: [PATCH 025/117] some fixes --- example/index.html | 4 +-- example/loadFile.html | 2 +- package.json | 4 +-- release/flowchart.js | 53 ++++++++++++++++++------------------ release/flowchart.js.map | 2 +- release/flowchart.min.js | 4 +-- release/flowchart.min.js.map | 2 +- releasenotes.md | 4 +++ site | 2 +- 9 files changed, 41 insertions(+), 36 deletions(-) diff --git a/example/index.html b/example/index.html index 3937c071..8ac8e0bf 100644 --- a/example/index.html +++ b/example/index.html @@ -6,10 +6,10 @@ - + - + + diff --git a/package.json b/package.json index b82c3921..c9b6ebd5 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.6.3", + "version": "1.6.4", "main": "./index", "private": false, "engines": { "node": "~v0.4.12" }, "dependencies": { - "raphael": "git://github.com/DmitryBaranovskiy/raphael.git" + "raphael": "2.2.6" }, "devDependencies": { "eslint": "^1.10.3", diff --git a/release/flowchart.js b/release/flowchart.js index ca620cce..e84e0b18 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,4 +1,4 @@ -// flowchart.js, v1.6.3 +// flowchart.js, v1.6.4 // Copyright (c)yyyy Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js @@ -149,7 +149,7 @@ }), options.link && this.text.attr("href", options.link), options.target && this.text.attr("target", options.target); var maxWidth = this.getAttr("maxWidth"); if (maxWidth) { - for (var words = options.text.split(" "), tempText = "", i = 0, ii = words.length; ii > i; i++) { + for (var words = options.text.split(" "), tempText = "", i = 0, ii = words.length; i < ii; i++) { var word = words[i]; this.text.attr("text", tempText + " " + word), tempText += this.text.getBBox().width > maxWidth ? "\n" + word : " " + word; } @@ -231,7 +231,7 @@ this.next.setY(rightPoint.y - this.next.height / 2), this.next.shiftX(this.group.getBBox().x + this.width + lineLength); var self = this; !function shift() { - for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; len > i; i++) { + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) { symb = self.chart.symbols[i]; var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x); if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width / 2) { @@ -253,7 +253,7 @@ this.next && (this.next_direction ? this.drawLineTo(this.next, "", this.next_direction) : this.drawLineTo(this.next)); }, Symbol.prototype.drawLineTo = function(symbol, text, origin) { this.connectedTo.indexOf(symbol) < 0 && this.connectedTo.push(symbol); - var line, x = this.getCenter().x, y = this.getCenter().y, right = this.getRight(), bottom = this.getBottom(), left = this.getLeft(), symbolX = symbol.getCenter().x, symbolY = symbol.getCenter().y, symbolTop = symbol.getTop(), symbolRight = symbol.getRight(), symbolLeft = symbol.getLeft(), isOnSameColumn = x === symbolX, isOnSameLine = y === symbolY, isUnder = symbolY > y, isUpper = y > symbolY || this === symbol, isLeft = x > symbolX, isRight = symbolX > x, maxX = 0, lineLength = this.getAttr("line-length"), lineWith = this.getAttr("line-width"); + var line, x = this.getCenter().x, y = this.getCenter().y, right = this.getRight(), bottom = this.getBottom(), left = this.getLeft(), symbolX = symbol.getCenter().x, symbolY = symbol.getCenter().y, symbolTop = symbol.getTop(), symbolRight = symbol.getRight(), symbolLeft = symbol.getLeft(), isOnSameColumn = x === symbolX, isOnSameLine = y === symbolY, isUnder = y < symbolY, isUpper = y > symbolY || this === symbol, isLeft = x > symbolX, isRight = x < symbolX, maxX = 0, lineLength = this.getAttr("line-length"), lineWith = this.getAttr("line-width"); if (origin && "bottom" !== origin || !isOnSameColumn || !isUnder) if (origin && "right" !== origin || !isOnSameLine || !isRight) if (origin && "left" !== origin || !isOnSameLine || !isLeft) if (origin && "right" !== origin || !isOnSameColumn || !isUpper) if (origin && "right" !== origin || !isOnSameColumn || !isUnder) if (origin && "bottom" !== origin || !isLeft) if (origin && "bottom" !== origin || !isRight) if (origin && "right" === origin && isLeft) line = drawLine(this.chart, right, [ { x: right.x + lineLength / 2, y: right.y @@ -382,10 +382,10 @@ this.rightStart = !0, symbol.leftEnd = !0, maxX = symbolLeft.x; else line = drawLine(this.chart, bottom, symbolTop, text), this.bottomStart = !0, symbol.topEnd = !0, maxX = bottom.x; if (line) { - for (var l = 0, llen = this.chart.lines.length; llen > l; l++) for (var len, otherLine = this.chart.lines[l], ePath = otherLine.attr("path"), lPath = line.attr("path"), iP = 0, lenP = ePath.length - 1; lenP > iP; iP++) { + for (var l = 0, llen = this.chart.lines.length; l < llen; l++) for (var len, otherLine = this.chart.lines[l], ePath = otherLine.attr("path"), lPath = line.attr("path"), iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) { var newPath = []; newPath.push([ "M", ePath[iP][1], ePath[iP][2] ]), newPath.push([ "L", ePath[iP + 1][1], ePath[iP + 1][2] ]); - for (var line1_from_x = newPath[0][1], line1_from_y = newPath[0][2], line1_to_x = newPath[1][1], line1_to_y = newPath[1][2], lP = 0, lenlP = lPath.length - 1; lenlP > lP; lP++) { + for (var line1_from_x = newPath[0][1], line1_from_y = newPath[0][2], line1_to_x = newPath[1][1], line1_to_y = newPath[1][2], lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) { var newLinePath = []; newLinePath.push([ "M", lPath[lP][1], lPath[lP][2] ]), newLinePath.push([ "L", lPath[lP + 1][1], lPath[lP + 1][2] ]); var line2_from_x = newLinePath[0][1], line2_from_y = newLinePath[0][2], line2_to_x = newLinePath[1][1], line2_to_y = newLinePath[1][2], 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); @@ -415,9 +415,9 @@ function(module, exports) { function drawPath(chart, location, points) { var i, len, path = "M{0},{1}"; - for (i = 2, len = 2 * points.length + 2; len > i; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; + for (i = 2, len = 2 * points.length + 2; i < len; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; var pathValues = [ location.x, location.y ]; - for (i = 0, len = points.length; len > i; i++) pathValues.push(points[i].x), pathValues.push(points[i].y); + for (i = 0, len = points.length; i < len; i++) pathValues.push(points[i].x), pathValues.push(points[i].y); var symbol = chart.paper.path(path, pathValues); symbol.attr("stroke", chart.options["element-color"]), symbol.attr("stroke-width", chart.options["line-width"]); var font = chart.options.font, fontF = chart.options["font-family"], fontW = chart.options["font-weight"]; @@ -433,9 +433,9 @@ var i, len; "[object Array]" !== Object.prototype.toString.call(to) && (to = [ to ]); var path = "M{0},{1}"; - for (i = 2, len = 2 * to.length + 2; len > i; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; + for (i = 2, len = 2 * to.length + 2; i < len; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; var pathValues = [ from.x, from.y ]; - for (i = 0, len = to.length; len > i; i++) pathValues.push(to[i].x), pathValues.push(to[i].y); + for (i = 0, len = to.length; i < len; i++) pathValues.push(to[i].x), pathValues.push(to[i].y); var line = chart.paper.path(path, pathValues); line.attr({ stroke: chart.options["line-color"], @@ -494,8 +494,8 @@ 0 === denominator ? result : (a = line1StartY - line2StartY, b = line1StartX - line2StartX, numerator1 = (line2EndX - line2StartX) * a - (line2EndY - line2StartY) * b, numerator2 = (line1EndX - line1StartX) * a - (line1EndY - line1StartY) * b, a = numerator1 / denominator, b = numerator2 / denominator, result.x = line1StartX + a * (line1EndX - line1StartX), - result.y = line1StartY + a * (line1EndY - line1StartY), a > 0 && 1 > a && (result.onLine1 = !0), - b > 0 && 1 > b && (result.onLine2 = !0), result); + result.y = line1StartY + a * (line1EndY - line1StartY), a > 0 && a < 1 && (result.onLine1 = !0), + b > 0 && b < 1 && (result.onLine2 = !0), result); } module.exports = { drawPath: drawPath, @@ -572,12 +572,12 @@ clean: function() { this.diagram.clean(); } - }, lines = [], prevBreak = 0, i0 = 1, i0len = input.length; i0len > i0; i0++) if ("\n" === input[i0] && "\\" !== input[i0 - 1]) { + }, lines = [], prevBreak = 0, i0 = 1, i0len = input.length; i0 < i0len; i0++) if ("\n" === input[i0] && "\\" !== input[i0 - 1]) { var line0 = input.substring(prevBreak, i0); prevBreak = i0 + 1, lines.push(line0.replace(/\\\n/g, "\n")); } prevBreak < input.length && lines.push(input.substr(prevBreak)); - for (var l = 1, len = lines.length; len > l; ) { + for (var l = 1, len = lines.length; l < len; ) { var currentLine = lines[l]; currentLine.indexOf("->") < 0 && currentLine.indexOf("=>") < 0 ? (lines[l - 1] += "\n" + currentLine, lines.splice(l, 1), len--) : l++; @@ -612,13 +612,13 @@ } /* end of flowstate support */ chart.symbols[symbol.key] = symbol; - } else if (line.indexOf("->") >= 0) for (var flowSymbols = line.split("->"), i = 0, lenS = flowSymbols.length; lenS > i; i++) { + } else if (line.indexOf("->") >= 0) for (var flowSymbols = line.split("->"), i = 0, lenS = flowSymbols.length; i < lenS; i++) { var flowSymb = flowSymbols[i], realSymb = getSymbol(flowSymb), next = getNextPath(flowSymb), direction = null; if (next.indexOf(",") >= 0) { var condOpt = next.split(","); next = condOpt[0], direction = condOpt[1].trim(); } - if (chart.start || (chart.start = realSymb), lenS > i + 1) { + if (chart.start || (chart.start = realSymb), i + 1 < lenS) { var nextSymb = flowSymbols[i + 1]; realSymb[next] = getSymbol(nextSymb), realSymb["direction_" + next] = direction, direction = null; @@ -698,7 +698,7 @@ this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2), this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength); var self = this; !function shift() { - for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; len > i; i++) { + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) { symb = self.chart.symbols[i]; var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) { @@ -742,28 +742,28 @@ return this.start = symbol, this.handle(symbol); }, FlowChart.prototype.render = function() { var symbol, line, maxWidth = 0, maxHeight = 0, i = 0, len = 0, maxX = 0, maxY = 0, minX = 0, minY = 0; - for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.width > maxWidth && (maxWidth = symbol.width), + for (i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], symbol.width > maxWidth && (maxWidth = symbol.width), symbol.height > maxHeight && (maxHeight = symbol.height); - for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.shiftX(this.options.x + (maxWidth - symbol.width) / 2 + this.options["line-width"]), + for (i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], symbol.shiftX(this.options.x + (maxWidth - symbol.width) / 2 + this.options["line-width"]), symbol.shiftY(this.options.y + (maxHeight - symbol.height) / 2 + this.options["line-width"]); // for (i = 0, len = this.symbols.length; i < len; i++) { // symbol = this.symbols[i]; // symbol.render(); // } - for (this.start.render(), i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], + for (this.start.render(), i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], symbol.renderLines(); - for (maxX = this.maxXFromLine, i = 0, len = this.symbols.length; len > i; i++) { + for (maxX = this.maxXFromLine, i = 0, len = this.symbols.length; i < len; i++) { symbol = this.symbols[i]; var x = symbol.getX() + symbol.width, y = symbol.getY() + symbol.height; x > maxX && (maxX = x), y > maxY && (maxY = y); } - for (i = 0, len = this.lines.length; len > i; i++) { + for (i = 0, len = this.lines.length; i < len; i++) { line = this.lines[i].getBBox(); var x = line.x, y = line.y, x2 = line.x2, y2 = line.y2; - minX > x && (minX = x), minY > y && (minY = y), x2 > maxX && (maxX = x2), y2 > maxY && (maxY = y2); + x < minX && (minX = x), y < minY && (minY = y), x2 > maxX && (maxX = x2), y2 > maxY && (maxY = y2); } var scale = this.options.scale, lineWidth = this.options["line-width"]; - 0 > minX && (minX -= lineWidth), 0 > minY && (minY -= lineWidth); + minX < 0 && (minX -= lineWidth), minY < 0 && (minY -= lineWidth); var width = maxX + lineWidth - minX, height = maxY + lineWidth - minY; this.paper.setSize(width * scale, height * scale), this.paper.setViewBox(minX, minY, width, height, !0); }, FlowChart.prototype.clean = function() { @@ -820,9 +820,10 @@ var t = Object(this), len = t.length >>> 0; if (0 === len) return -1; var n = 0; - if (arguments.length > 0 && (n = Number(arguments[1]), n != n ? n = 0 : 0 !== n && n != 1 / 0 && n != -(1 / 0) && (n = (n > 0 || -1) * Math.floor(Math.abs(n)))), + if (arguments.length > 0 && (n = Number(arguments[1]), n != n ? // shortcut for verifying if it's NaN + n = 0 : 0 !== n && n != 1 / 0 && n != -(1 / 0) && (n = (n > 0 || -1) * Math.floor(Math.abs(n)))), n >= len) return -1; - for (var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); len > k; k++) if (k in t && t[k] === searchElement) return k; + for (var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); k < len; k++) if (k in t && t[k] === searchElement) return k; return -1; }), // add lastIndexOf to non ECMA-262 standard compliant browsers Array.prototype.lastIndexOf || (Array.prototype.lastIndexOf = function(searchElement) { diff --git a/release/flowchart.js.map b/release/flowchart.js.map index 7299ee60..8a93bd73 100644 --- a/release/flowchart.js.map +++ b/release/flowchart.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 41178340126627f4fc47","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0];\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t var x = line.x;\n\t var y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 41178340126627f4fc47\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n var x = line.x;\n var y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 41178340126627f4fc47","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0];\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t var x = line.x;\n\t var y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 41178340126627f4fc47\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n var x = line.x;\n var y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index 22e4df8a..203aafef 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,7 +1,7 @@ -// flowchart.js, v1.6.3 +// flowchart.js, v1.6.4 // Copyright (c)yyyy Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js -!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(8);var r=e(4);e(14);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),o=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var n=this.getAttr("maxWidth");if(n){for(var h=i.text.split(" "),a="",x=0,y=h.length;y>x;x++){var l=h[x];this.text.attr("text",a+" "+l),a+=this.text.getBBox().width>n?"\n"+l:" "+l}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*g,height:this.text.getBBox().height+2*g}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),o=s.drawLine,n=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function s(){for(var i,r=!1,o=0,n=e.chart.symbols.length;n>o;o++){i=e.chart.symbols[o];var h=Math.abs(i.getCenter().x-e.next.getCenter().x);if(i.getCenter().y>e.next.getCenter().y&&h<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),s())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,"",this.next_direction):this.drawLineTo(this.next))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),y=this.getLeft(),l=t.getCenter().x,g=t.getCenter().y,f=t.getTop(),p=t.getRight(),c=t.getLeft(),u=s===l,d=h===g,m=g>h,b=h>g||this===t,v=s>l,w=l>s,k=0,_=this.getAttr("line-length"),B=this.getAttr("line-width");if(e&&"bottom"!==e||!u||!m)if(e&&"right"!==e||!d||!w)if(e&&"left"!==e||!d||!v)if(e&&"right"!==e||!u||!b)if(e&&"right"!==e||!u||!m)if(e&&"bottom"!==e||!v)if(e&&"bottom"!==e||!w)if(e&&"right"===e&&v)r=o(this.chart,a,[{x:a.x+_/2,y:a.y},{x:a.x+_/2,y:f.y-_/2},{x:f.x,y:f.y-_/2},{x:f.x,y:f.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+_/2;else if(e&&"right"===e&&w)r=o(this.chart,a,[{x:f.x,y:a.y},{x:f.x,y:f.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+_/2;else if(e&&"bottom"===e&&u&&b)r=o(this.chart,x,[{x:x.x,y:x.y+_/2},{x:a.x+_/2,y:x.y+_/2},{x:a.x+_/2,y:f.y-_/2},{x:f.x,y:f.y-_/2},{x:f.x,y:f.y}],i),this.bottomStart=!0,t.topEnd=!0,k=x.x+_/2;else if("left"===e&&u&&b){var A=y.x-_/2;c.xL;L++)for(var O,X=this.chart.lines[L],T=X.attr("path"),Y=r.attr("path"),C=0,S=T.length-1;S>C;C++){var j=[];j.push(["M",T[C][1],T[C][2]]),j.push(["L",T[C+1][1],T[C+1][2]]);for(var E=j[0][1],z=j[0][2],P=j[1][1],R=j[1][2],F=0,I=Y.length-1;I>F;F++){var W=[];W.push(["M",Y[F][1],Y[F][2]]),W.push(["L",Y[F+1][1],Y[F+1][2]]);var N=W[0][1],V=W[0][2],q=W[1][1],G=W[1][2],Q=n(E,z,P,R,N,V,q,G);if(Q.onLine1&&Q.onLine2){var $;V===G?N>q?($=["L",Q.x+2*B,V],Y.splice(F+1,0,$),$=["C",Q.x+2*B,V,Q.x,V-4*B,Q.x-2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",Q.x-2*B,V],Y.splice(F+1,0,$),$=["C",Q.x-2*B,V,Q.x,V-4*B,Q.x+2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):V>G?($=["L",N,Q.y+2*B],Y.splice(F+1,0,$),$=["C",N,Q.y+2*B,N+4*B,Q.y,N,Q.y-2*B],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",N,Q.y-2*B],Y.splice(F+1,0,$),$=["C",N,Q.y-2*B,N+4*B,Q.y,N,Q.y+2*B],Y.splice(F+2,0,$),r.attr("path",Y)),F+=2,O+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,o="M{0},{1}";for(r=2,s=2*e.length+2;s>r;r+=2)o+=" L{"+r+"},{"+(r+1)+"}";var n=[i.x,i.y];for(r=0,s=e.length;s>r;r++)n.push(e[r].x),n.push(e[r].y);var h=t.paper.path(o,n);h.attr("stroke",t.options["element-color"]),h.attr("stroke-width",t.options["line-width"]);var a=t.options.font,x=t.options["font-family"],y=t.options["font-weight"];return a&&h.attr({font:a}),x&&h.attr({"font-family":x}),y&&h.attr({"font-weight":y}),h}function r(t,i,e,r){var s,o;"[object Array]"!==Object.prototype.toString.call(e)&&(e=[e]);var n="M{0},{1}";for(s=2,o=2*e.length+2;o>s;s+=2)n+=" L{"+s+"},{"+(s+1)+"}";var h=[i.x,i.y];for(s=0,o=e.length;o>s;s++)h.push(e[s].x),h.push(e[s].y);var a=t.paper.path(n,h);a.attr({stroke:t.options["line-color"],"stroke-width":t.options["line-width"],"arrow-end":t.options["arrow-end"]});var x=t.options.font,y=t.options["font-family"],l=t.options["font-weight"];if(x&&a.attr({font:x}),y&&a.attr({"font-family":y}),l&&a.attr({"font-weight":l}),r){var g=!1,f=t.paper.text(0,0,r),p=!1,c=e[0];i.y===c.y&&(p=!0);var u=0,d=0;g?(u=i.x>c.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"])),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),y&&f.attr({"font-family":y}),l&&f.attr({"font-weight":l})}return a}function s(t,i,e,r,s,o,n,h){var a,x,y,l,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-o)*(e-t)-(n-s)*(r-i),0===a?f:(x=i-o,y=t-s,l=(n-s)*x-(h-o)*y,g=(e-t)*x-(r-i)*y,x=l/a,y=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&1>x&&(f.onLine1=!0),y>0&&1>y&&(f.onLine2=!0),f)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?r.symbols[t.substring(0,i-1)]:r.symbols[t]}function e(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=X.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var r={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(l,t);break;case"end":g[t.key]=new n(l,t);break;case"operation":g[t.key]=new h(l,t);break;case"inputoutput":g[t.key]=new a(l,t);break;case"subroutine":g[t.key]=new x(l,t);break;case"condition":g[t.key]=new y(l,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var l=new s(t,i);this.diagram=l;var g={};!function f(t,i,s){var o=e(t);return r.start===t?l.startWith(o):i&&s&&!i.pathOk&&(i instanceof y?(s.yes===t&&i.yes(o),s.no===t&&i.no(o)):i.then(o)),o.pathOk?o:(o instanceof y?(t.yes&&f(t.yes,o,t),t.no&&f(t.no,o,t)):t.next&&f(t.next,o,t),o)}(this.start),l.render()},clean:function(){this.diagram.clean()}},l=[],g=0,f=1,p=t.length;p>f;f++)if("\n"===t[f]&&"\\"!==t[f-1]){var c=t.substring(g,f);g=f+1,l.push(c.replace(/\\\n/g,"\n"))}gu;){var m=l[u];m.indexOf("->")<0&&m.indexOf("=>")<0?(l[u-1]+="\n"+m,l.splice(u,1),d--):u++}for(;l.length>0;){var b=l.splice(0,1)[0];if(b.indexOf("=>")>=0){var v,w=b.split("=>"),k={key:w[0],symbolType:w[1],text:null,link:null,target:null,flowstate:null};if(k.symbolType.indexOf(": ")>=0&&(v=k.symbolType.split(": "),k.symbolType=v.shift(),k.text=v.join(": ")),k.text&&k.text.indexOf(":>")>=0?(v=k.text.split(":>"),k.text=v.shift(),k.link=v.join(":>")):k.symbolType.indexOf(":>")>=0&&(v=k.symbolType.split(":>"),k.symbolType=v.shift(),k.link=v.join(":>")),k.symbolType.indexOf("\n")>=0&&(k.symbolType=k.symbolType.split("\n")[0]),k.link){var _=k.link.indexOf("[")+1,B=k.link.indexOf("]");_>=0&&B>=0&&(k.target=k.link.substring(_,B),k.link=k.link.substring(0,_-1))}if(k.text&&k.text.indexOf("|")>=0){var A=k.text.split("|");k.flowstate=A.pop().trim(),k.text=A.join("|")}r.symbols[k.key]=k}else if(b.indexOf("->")>=0)for(var L=b.split("->"),M=0,O=L.length;O>M;M++){var X=L[M],T=i(X),Y=e(X),C=null;if(Y.indexOf(",")>=0){var S=Y.split(",");Y=S[0],C=S[1].trim()}if(r.start||(r.start=T),O>M+1){var j=L[M+1];T[Y]=i(j),T["direction_"+Y]=C,C=null}}}return r}var s=e(6),o=e(12),n=e(9),h=e(11),a=e(10),x=e(13),y=e(5);t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.yes_direction="bottom",this.no_direction="right",i.yes&&i.direction_yes&&i.no&&!i.direction_no?"right"===i.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):(this.no_direction="right",this.yes_direction="bottom"):i.yes&&!i.direction_yes&&i.no&&i.direction_no?"right"===i.direction_no?(this.yes_direction="bottom",this.no_direction="right"):(this.yes_direction="right",this.no_direction="bottom"):(this.yes_direction="bottom",this.no_direction="right"),this.yes_direction=this.yes_direction||"bottom",this.no_direction=this.no_direction||"right",this.text.attr({x:2*this.textMargin});var e=this.text.getBBox().width+3*this.textMargin;e+=e/2;var r=this.text.getBBox().height+2*this.textMargin;r+=r/2,r=Math.max(.5*e,r);var o=e/4,n=r/4;this.text.attr({x:o+this.textMargin/2});var a={x:o,y:n},x=[{x:o-e/4,y:n+r/4},{x:o-e/4+e/2,y:n+r/4+r/2},{x:o-e/4+e,y:n+r/4},{x:o-e/4+e/2,y:n+r/4-r/2},{x:o-e/4,y:n+r/4}],y=h(t,a,x);y.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&y.attr("href",i.link),i.target&&y.attr("target",i.target),i.key&&(y.node.id=i.key),y.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:y.getBBox().height/2}),this.group.push(y),y.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,n=e(3),h=n.drawPath;o(r,s),r.prototype.render=function(){this.yes_direction&&(this[this.yes_direction+"_symbol"]=this.yes_symbol),this.no_direction&&(this[this.no_direction+"_symbol"]=this.no_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.right_symbol){var e=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(e.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var r=this;!function s(){for(var i,e=!1,o=0,n=r.chart.symbols.length;n>o;o++){i=r.chart.symbols[o];var h=Math.abs(i.getCenter().x-r.right_symbol.getCenter().x);if(i.getCenter().y>r.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),s())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=o(i,n),this.symbols=[],this.lines=[],this.start=null}var s=e(15),o=e(1).defaults,n=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,o=0,n=0,h=0,a=0,x=0;for(s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],t.width>e&&(e=t.width),t.height>r&&(r=t.height);for(s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],t.shiftX(this.options.x+(e-t.width)/2+this.options["line-width"]),t.shiftY(this.options.y+(r-t.height)/2+this.options["line-width"]);for(this.start.render(),s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],t.renderLines();for(n=this.maxXFromLine,s=0,o=this.symbols.length;o>s;s++){t=this.symbols[s];var y=t.getX()+t.width,l=t.getY()+t.height;y>n&&(n=y),l>h&&(h=l)}for(s=0,o=this.lines.length;o>s;s++){i=this.lines[s].getBBox();var y=i.x,l=i.y,g=i.x2,f=i.y2;a>y&&(a=y),x>l&&(x=l),g>n&&(n=g),f>h&&(h=f)}var p=this.options.scale,c=this.options["line-width"];0>a&&(a-=c),0>x&&(x-=c);var u=n+c-a,d=h+c-x;this.paper.setSize(u*p,d*p),this.paper.setViewBox(a,x,u,d,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);e>s;s++)if(s in i&&i[s]===t)return s;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,n=r/2,a={x:o,y:n},x=[{x:o-this.textMargin,y:r},{x:o-this.textMargin+e,y:r},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:n}],y=h(t,a,x);y.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&y.attr("href",i.link),i.target&&y.attr("target",i.target),i.key&&(y.node.id=i.key),y.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:y.getBBox().height/2}),this.group.push(y),y.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,n=e(3),h=n.drawPath;o(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var o=this.getAttr("font"),n=this.getAttr("font-family"),h=this.getAttr("font-weight");o&&r.attr({font:o}),n&&r.attr({"font-family":n}),h&&r.attr({"font-weight":h}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); +!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(8);var r=e(4);e(14);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),o=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var n=this.getAttr("maxWidth");if(n){for(var h=i.text.split(" "),a="",x=0,y=h.length;xn?"\n"+l:" "+l}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*g,height:this.text.getBBox().height+2*g}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),o=s.drawLine,n=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function s(){for(var i,r=!1,o=0,n=e.chart.symbols.length;oe.next.getCenter().y&&h<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),s())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,"",this.next_direction):this.drawLineTo(this.next))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),y=this.getLeft(),l=t.getCenter().x,g=t.getCenter().y,f=t.getTop(),p=t.getRight(),c=t.getLeft(),u=s===l,d=h===g,m=hg||this===t,v=s>l,w=sq?($=["L",Q.x+2*B,V],Y.splice(F+1,0,$),$=["C",Q.x+2*B,V,Q.x,V-4*B,Q.x-2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",Q.x-2*B,V],Y.splice(F+1,0,$),$=["C",Q.x-2*B,V,Q.x,V-4*B,Q.x+2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):V>G?($=["L",N,Q.y+2*B],Y.splice(F+1,0,$),$=["C",N,Q.y+2*B,N+4*B,Q.y,N,Q.y-2*B],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",N,Q.y-2*B],Y.splice(F+1,0,$),$=["C",N,Q.y-2*B,N+4*B,Q.y,N,Q.y+2*B],Y.splice(F+2,0,$),r.attr("path",Y)),F+=2,O+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,o="M{0},{1}";for(r=2,s=2*e.length+2;rc.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"])),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),y&&f.attr({"font-family":y}),l&&f.attr({"font-weight":l})}return a}function s(t,i,e,r,s,o,n,h){var a,x,y,l,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-o)*(e-t)-(n-s)*(r-i),0===a?f:(x=i-o,y=t-s,l=(n-s)*x-(h-o)*y,g=(e-t)*x-(r-i)*y,x=l/a,y=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&x<1&&(f.onLine1=!0),y>0&&y<1&&(f.onLine2=!0),f)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?r.symbols[t.substring(0,i-1)]:r.symbols[t]}function e(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=X.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var r={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(l,t);break;case"end":g[t.key]=new n(l,t);break;case"operation":g[t.key]=new h(l,t);break;case"inputoutput":g[t.key]=new a(l,t);break;case"subroutine":g[t.key]=new x(l,t);break;case"condition":g[t.key]=new y(l,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var l=new s(t,i);this.diagram=l;var g={};!function f(t,i,s){var o=e(t);return r.start===t?l.startWith(o):i&&s&&!i.pathOk&&(i instanceof y?(s.yes===t&&i.yes(o),s.no===t&&i.no(o)):i.then(o)),o.pathOk?o:(o instanceof y?(t.yes&&f(t.yes,o,t),t.no&&f(t.no,o,t)):t.next&&f(t.next,o,t),o)}(this.start),l.render()},clean:function(){this.diagram.clean()}},l=[],g=0,f=1,p=t.length;f")<0&&m.indexOf("=>")<0?(l[u-1]+="\n"+m,l.splice(u,1),d--):u++}for(;l.length>0;){var b=l.splice(0,1)[0];if(b.indexOf("=>")>=0){var v,w=b.split("=>"),k={key:w[0],symbolType:w[1],text:null,link:null,target:null,flowstate:null};if(k.symbolType.indexOf(": ")>=0&&(v=k.symbolType.split(": "),k.symbolType=v.shift(),k.text=v.join(": ")),k.text&&k.text.indexOf(":>")>=0?(v=k.text.split(":>"),k.text=v.shift(),k.link=v.join(":>")):k.symbolType.indexOf(":>")>=0&&(v=k.symbolType.split(":>"),k.symbolType=v.shift(),k.link=v.join(":>")),k.symbolType.indexOf("\n")>=0&&(k.symbolType=k.symbolType.split("\n")[0]),k.link){var _=k.link.indexOf("[")+1,B=k.link.indexOf("]");_>=0&&B>=0&&(k.target=k.link.substring(_,B),k.link=k.link.substring(0,_-1))}if(k.text&&k.text.indexOf("|")>=0){var A=k.text.split("|");k.flowstate=A.pop().trim(),k.text=A.join("|")}r.symbols[k.key]=k}else if(b.indexOf("->")>=0)for(var L=b.split("->"),M=0,O=L.length;M=0){var S=Y.split(",");Y=S[0],C=S[1].trim()}if(r.start||(r.start=T),M+1r.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),s())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=o(i,n),this.symbols=[],this.lines=[],this.start=null}var s=e(15),o=e(1).defaults,n=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,o=0,n=0,h=0,a=0,x=0;for(s=0,o=this.symbols.length;se&&(e=t.width),t.height>r&&(r=t.height);for(s=0,o=this.symbols.length;sn&&(n=y),l>h&&(h=l)}for(s=0,o=this.lines.length;sn&&(n=g),f>h&&(h=f)}var p=this.options.scale,c=this.options["line-width"];a<0&&(a-=c),x<0&&(x-=c);var u=n+c-a,d=h+c-x;this.paper.setSize(u*p,d*p),this.paper.setViewBox(a,x,u,d,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);s>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,n=r/2,a={x:o,y:n},x=[{x:o-this.textMargin,y:r},{x:o-this.textMargin+e,y:r},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:n}],y=h(t,a,x);y.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&y.attr("href",i.link),i.target&&y.attr("target",i.target),i.key&&(y.node.id=i.key),y.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:y.getBBox().height/2}),this.group.push(y),y.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,n=e(3),h=n.drawPath;o(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var o=this.getAttr("font"),n=this.getAttr("font-family"),h=this.getAttr("font-weight");o&&r.attr({font:o}),n&&r.attr({"font-family":n}),h&&r.attr({"font-weight":h}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); //# sourceMappingURL=flowchart.min.js.map \ No newline at end of file diff --git a/release/flowchart.min.js.map b/release/flowchart.min.js.map index 57a0198e..36f0ea88 100644 --- a/release/flowchart.min.js.map +++ b/release/flowchart.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 614f32ecc8b2aa5b1933","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0];\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t var x = line.x;\n\t var y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 614f32ecc8b2aa5b1933\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n var x = line.x;\n var y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 614f32ecc8b2aa5b1933","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0];\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t var x = line.x;\n\t var y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 614f32ecc8b2aa5b1933\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n var x = line.x;\n var y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/releasenotes.md b/releasenotes.md index 3f5dc08e..729b84e8 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,7 @@ +### v1.6.4 + +- raphael now is an npm dependency (not the git reference anymore) + ### v1.6.3 - Allow going to same symbol thanks to [nonylene](https://github.com/nonylene) [##83](https://github.com/adrai/flowchart.js/pull/#83) diff --git a/site b/site index 1e6df1f3..54249a13 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 1e6df1f3d59acd98a3b718bf415d174132f6a403 +Subproject commit 54249a13a5586d5d702f43d7dcfa77e00dccf9a1 From 8221740321277bdbfe68c8f671374b269244f7a8 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Sun, 1 Jan 2017 11:46:38 +0100 Subject: [PATCH 026/117] update site --- site | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site b/site index 54249a13..e92efac1 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 54249a13a5586d5d702f43d7dcfa77e00dccf9a1 +Subproject commit e92efac122c19a56fc8cca4a1092c538d3932857 From 34f824dadad003a5ea5591b04942ccdcf12775c1 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Wed, 4 Jan 2017 19:42:44 +0100 Subject: [PATCH 027/117] fix node engine in package.json --- README.md | 2 +- bower.json | 2 +- license | 2 +- package.json | 6 +++--- release/flowchart.js | 4 ++-- release/flowchart.min.js | 4 ++-- site | 2 +- webpack.config.js | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 6d8e5b03..1d5c9d13 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ Many thanks to [js-sequence-diagrams](http://bramp.github.io/js-sequence-diagram #Licence -Copyright (c) 2016 Adriano Raiano +Copyright (c) 2017 Adriano Raiano Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/bower.json b/bower.json index 521e6e81..64b0e583 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "flowchart", - "version": "1.6.1", + "version": "1.6.5", "main": "./release/flowchart.min.js", "dependencies": {}, "ignore": [ diff --git a/license b/license index 08c1a9ad..8e741c39 100644 --- a/license +++ b/license @@ -1,4 +1,4 @@ -Copyright (c) 2016 Adriano Raiano +Copyright (c) 2017 Adriano Raiano Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/package.json b/package.json index c9b6ebd5..7d8f1934 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.6.4", + "version": "1.6.5", "main": "./index", "private": false, "engines": { - "node": "~v0.4.12" + "node": ">=4.0.0" }, "dependencies": { - "raphael": "2.2.6" + "raphael": "2.2.7" }, "devDependencies": { "eslint": "^1.10.3", diff --git a/release/flowchart.js b/release/flowchart.js index e84e0b18..8d93e878 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,5 +1,5 @@ -// flowchart.js, v1.6.4 -// Copyright (c)yyyy Adriano Raiano (adrai). +// flowchart.js, v1.6.5 +// Copyright (c)2017 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js diff --git a/release/flowchart.min.js b/release/flowchart.min.js index 203aafef..d049565a 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,5 +1,5 @@ -// flowchart.js, v1.6.4 -// Copyright (c)yyyy Adriano Raiano (adrai). +// flowchart.js, v1.6.5 +// Copyright (c)2017 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js diff --git a/site b/site index e92efac1..0db38791 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit e92efac122c19a56fc8cca4a1092c538d3932857 +Subproject commit 0db387911f818da0cca45757a5717c880dcc7ce5 diff --git a/webpack.config.js b/webpack.config.js index 6570660f..4bdc0add 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -5,7 +5,7 @@ var moment = require('moment'); var component = require('./package.json'); var banner = '// ' + component.name + ', v' + component.version + '\n' + - '// Copyright (c)' + moment().format('yyyy') + ' Adriano Raiano (adrai).\n' + + '// Copyright (c)' + moment().format('YYYY') + ' Adriano Raiano (adrai).\n' + '// Distributed under MIT license\n' + '// http://adrai.github.io/flowchart.js\n'; From 2b475e87e0f5e7720d703d299f784dc449fc648f Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Wed, 4 Jan 2017 19:44:07 +0100 Subject: [PATCH 028/117] update releasenotes --- releasenotes.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/releasenotes.md b/releasenotes.md index 729b84e8..b55ac5bb 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,7 @@ +### v1.6.5 + +- set proper engine version in package.json + ### v1.6.4 - raphael now is an npm dependency (not the git reference anymore) From c65b9a3b4e20b3b5ac3b0f21d8bf0864818781cb Mon Sep 17 00:00:00 2001 From: Timoses Date: Thu, 6 Apr 2017 19:52:53 +0200 Subject: [PATCH 029/117] Fix disruptive space char when parsing (#105) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reproduction: Open locally (in Firefox): index.html ``` flowchart.js · Playground
``` test.txt ``` st=>start: Start:>http://www.google.com e=>end:>http://www.google.com op1=>operation: My Ooooperation sub1=>subroutine: My Subroutine cond=>condition: Yes or No?:>http://www.google.com io=>inputoutput: catch something... st->op1(right)->cond cond(yes)->io->e cond(no)->sub1(right)->op1 ``` flowSymbols will be ``` Array [ "st", "op1(right)", "cond " ] // ergo when i=2 var flowSymb = flowSymbols[i], realSymb = getSymbol(flowSymb) // realSymb will be undefined ``` Result: https://i.imgur.com/mt2HiRH.png --- src/flowchart.parse.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/flowchart.parse.js b/src/flowchart.parse.js index b01d40dd..79086a9e 100644 --- a/src/flowchart.parse.js +++ b/src/flowchart.parse.js @@ -149,7 +149,7 @@ function parse(input) { } while (lines.length > 0) { - var line = lines.splice(0, 1)[0]; + var line = lines.splice(0, 1)[0].trim(); if (line.indexOf('=>') >= 0) { // definition From f71e37798833ce48f34648a538908656b5ad6aa0 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Thu, 6 Apr 2017 19:56:56 +0200 Subject: [PATCH 030/117] bump --- bower.json | 2 +- package.json | 2 +- release/flowchart.js | 17 ++++++++--------- release/flowchart.js.map | 2 +- release/flowchart.min.js | 4 ++-- release/flowchart.min.js.map | 2 +- releasenotes.md | 4 ++++ site | 2 +- src/flowchart.chart.js | 11 +++++++---- 9 files changed, 26 insertions(+), 20 deletions(-) diff --git a/bower.json b/bower.json index 64b0e583..5b82ba5d 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "flowchart", - "version": "1.6.5", + "version": "1.6.6", "main": "./release/flowchart.min.js", "dependencies": {}, "ignore": [ diff --git a/package.json b/package.json index 7d8f1934..470fba31 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.6.5", + "version": "1.6.6", "main": "./index", "private": false, "engines": { diff --git a/release/flowchart.js b/release/flowchart.js index 8d93e878..044ac031 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,4 +1,4 @@ -// flowchart.js, v1.6.5 +// flowchart.js, v1.6.6 // Copyright (c)2017 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js @@ -583,7 +583,7 @@ lines.splice(l, 1), len--) : l++; } for (;lines.length > 0; ) { - var line = lines.splice(0, 1)[0]; + var line = lines.splice(0, 1)[0].trim(); if (line.indexOf("=>") >= 0) { // definition var sub, parts = line.split("=>"), symbol = { @@ -752,14 +752,13 @@ // } for (this.start.render(), i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], symbol.renderLines(); - for (maxX = this.maxXFromLine, i = 0, len = this.symbols.length; i < len; i++) { - symbol = this.symbols[i]; - var x = symbol.getX() + symbol.width, y = symbol.getY() + symbol.height; - x > maxX && (maxX = x), y > maxY && (maxY = y); - } + maxX = this.maxXFromLine; + var x, y; + for (i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], x = symbol.getX() + symbol.width, + y = symbol.getY() + symbol.height, x > maxX && (maxX = x), y > maxY && (maxY = y); for (i = 0, len = this.lines.length; i < len; i++) { - line = this.lines[i].getBBox(); - var x = line.x, y = line.y, x2 = line.x2, y2 = line.y2; + line = this.lines[i].getBBox(), x = line.x, y = line.y; + var x2 = line.x2, y2 = line.y2; x < minX && (minX = x), y < minY && (minY = y), x2 > maxX && (maxX = x2), y2 > maxY && (maxY = y2); } var scale = this.options.scale, lineWidth = this.options["line-width"]; diff --git a/release/flowchart.js.map b/release/flowchart.js.map index 8a93bd73..8386b012 100644 --- a/release/flowchart.js.map +++ b/release/flowchart.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 41178340126627f4fc47","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0];\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t var x = line.x;\n\t var y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 41178340126627f4fc47\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n var x = line.x;\n var y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 156f276ff40c858ca0b6","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].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],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 156f276ff40c858ca0b6\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index d049565a..9d1cb4fc 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,7 +1,7 @@ -// flowchart.js, v1.6.5 +// flowchart.js, v1.6.6 // Copyright (c)2017 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js -!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(8);var r=e(4);e(14);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),o=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var n=this.getAttr("maxWidth");if(n){for(var h=i.text.split(" "),a="",x=0,y=h.length;xn?"\n"+l:" "+l}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*g,height:this.text.getBBox().height+2*g}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),o=s.drawLine,n=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function s(){for(var i,r=!1,o=0,n=e.chart.symbols.length;oe.next.getCenter().y&&h<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),s())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,"",this.next_direction):this.drawLineTo(this.next))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),y=this.getLeft(),l=t.getCenter().x,g=t.getCenter().y,f=t.getTop(),p=t.getRight(),c=t.getLeft(),u=s===l,d=h===g,m=hg||this===t,v=s>l,w=sq?($=["L",Q.x+2*B,V],Y.splice(F+1,0,$),$=["C",Q.x+2*B,V,Q.x,V-4*B,Q.x-2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",Q.x-2*B,V],Y.splice(F+1,0,$),$=["C",Q.x-2*B,V,Q.x,V-4*B,Q.x+2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):V>G?($=["L",N,Q.y+2*B],Y.splice(F+1,0,$),$=["C",N,Q.y+2*B,N+4*B,Q.y,N,Q.y-2*B],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",N,Q.y-2*B],Y.splice(F+1,0,$),$=["C",N,Q.y-2*B,N+4*B,Q.y,N,Q.y+2*B],Y.splice(F+2,0,$),r.attr("path",Y)),F+=2,O+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,o="M{0},{1}";for(r=2,s=2*e.length+2;rc.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"])),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),y&&f.attr({"font-family":y}),l&&f.attr({"font-weight":l})}return a}function s(t,i,e,r,s,o,n,h){var a,x,y,l,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-o)*(e-t)-(n-s)*(r-i),0===a?f:(x=i-o,y=t-s,l=(n-s)*x-(h-o)*y,g=(e-t)*x-(r-i)*y,x=l/a,y=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&x<1&&(f.onLine1=!0),y>0&&y<1&&(f.onLine2=!0),f)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?r.symbols[t.substring(0,i-1)]:r.symbols[t]}function e(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=X.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var r={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(l,t);break;case"end":g[t.key]=new n(l,t);break;case"operation":g[t.key]=new h(l,t);break;case"inputoutput":g[t.key]=new a(l,t);break;case"subroutine":g[t.key]=new x(l,t);break;case"condition":g[t.key]=new y(l,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var l=new s(t,i);this.diagram=l;var g={};!function f(t,i,s){var o=e(t);return r.start===t?l.startWith(o):i&&s&&!i.pathOk&&(i instanceof y?(s.yes===t&&i.yes(o),s.no===t&&i.no(o)):i.then(o)),o.pathOk?o:(o instanceof y?(t.yes&&f(t.yes,o,t),t.no&&f(t.no,o,t)):t.next&&f(t.next,o,t),o)}(this.start),l.render()},clean:function(){this.diagram.clean()}},l=[],g=0,f=1,p=t.length;f")<0&&m.indexOf("=>")<0?(l[u-1]+="\n"+m,l.splice(u,1),d--):u++}for(;l.length>0;){var b=l.splice(0,1)[0];if(b.indexOf("=>")>=0){var v,w=b.split("=>"),k={key:w[0],symbolType:w[1],text:null,link:null,target:null,flowstate:null};if(k.symbolType.indexOf(": ")>=0&&(v=k.symbolType.split(": "),k.symbolType=v.shift(),k.text=v.join(": ")),k.text&&k.text.indexOf(":>")>=0?(v=k.text.split(":>"),k.text=v.shift(),k.link=v.join(":>")):k.symbolType.indexOf(":>")>=0&&(v=k.symbolType.split(":>"),k.symbolType=v.shift(),k.link=v.join(":>")),k.symbolType.indexOf("\n")>=0&&(k.symbolType=k.symbolType.split("\n")[0]),k.link){var _=k.link.indexOf("[")+1,B=k.link.indexOf("]");_>=0&&B>=0&&(k.target=k.link.substring(_,B),k.link=k.link.substring(0,_-1))}if(k.text&&k.text.indexOf("|")>=0){var A=k.text.split("|");k.flowstate=A.pop().trim(),k.text=A.join("|")}r.symbols[k.key]=k}else if(b.indexOf("->")>=0)for(var L=b.split("->"),M=0,O=L.length;M=0){var S=Y.split(",");Y=S[0],C=S[1].trim()}if(r.start||(r.start=T),M+1r.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),s())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=o(i,n),this.symbols=[],this.lines=[],this.start=null}var s=e(15),o=e(1).defaults,n=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,o=0,n=0,h=0,a=0,x=0;for(s=0,o=this.symbols.length;se&&(e=t.width),t.height>r&&(r=t.height);for(s=0,o=this.symbols.length;sn&&(n=y),l>h&&(h=l)}for(s=0,o=this.lines.length;sn&&(n=g),f>h&&(h=f)}var p=this.options.scale,c=this.options["line-width"];a<0&&(a-=c),x<0&&(x-=c);var u=n+c-a,d=h+c-x;this.paper.setSize(u*p,d*p),this.paper.setViewBox(a,x,u,d,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);s>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,n=r/2,a={x:o,y:n},x=[{x:o-this.textMargin,y:r},{x:o-this.textMargin+e,y:r},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:n}],y=h(t,a,x);y.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&y.attr("href",i.link),i.target&&y.attr("target",i.target),i.key&&(y.node.id=i.key),y.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:y.getBBox().height/2}),this.group.push(y),y.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,n=e(3),h=n.drawPath;o(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var o=this.getAttr("font"),n=this.getAttr("font-family"),h=this.getAttr("font-weight");o&&r.attr({font:o}),n&&r.attr({"font-family":n}),h&&r.attr({"font-weight":h}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); +!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(8);var r=e(4);e(14);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),o=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var n=this.getAttr("maxWidth");if(n){for(var h=i.text.split(" "),a="",x=0,y=h.length;xn?"\n"+l:" "+l}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*g,height:this.text.getBBox().height+2*g}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),o=s.drawLine,n=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function s(){for(var i,r=!1,o=0,n=e.chart.symbols.length;oe.next.getCenter().y&&h<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),s())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,"",this.next_direction):this.drawLineTo(this.next))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),y=this.getLeft(),l=t.getCenter().x,g=t.getCenter().y,f=t.getTop(),p=t.getRight(),c=t.getLeft(),u=s===l,d=h===g,m=hg||this===t,v=s>l,w=sq?($=["L",Q.x+2*B,V],Y.splice(F+1,0,$),$=["C",Q.x+2*B,V,Q.x,V-4*B,Q.x-2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",Q.x-2*B,V],Y.splice(F+1,0,$),$=["C",Q.x-2*B,V,Q.x,V-4*B,Q.x+2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):V>G?($=["L",N,Q.y+2*B],Y.splice(F+1,0,$),$=["C",N,Q.y+2*B,N+4*B,Q.y,N,Q.y-2*B],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",N,Q.y-2*B],Y.splice(F+1,0,$),$=["C",N,Q.y-2*B,N+4*B,Q.y,N,Q.y+2*B],Y.splice(F+2,0,$),r.attr("path",Y)),F+=2,O+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,o="M{0},{1}";for(r=2,s=2*e.length+2;rc.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"])),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),y&&f.attr({"font-family":y}),l&&f.attr({"font-weight":l})}return a}function s(t,i,e,r,s,o,n,h){var a,x,y,l,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-o)*(e-t)-(n-s)*(r-i),0===a?f:(x=i-o,y=t-s,l=(n-s)*x-(h-o)*y,g=(e-t)*x-(r-i)*y,x=l/a,y=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&x<1&&(f.onLine1=!0),y>0&&y<1&&(f.onLine2=!0),f)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?r.symbols[t.substring(0,i-1)]:r.symbols[t]}function e(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=X.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var r={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(l,t);break;case"end":g[t.key]=new n(l,t);break;case"operation":g[t.key]=new h(l,t);break;case"inputoutput":g[t.key]=new a(l,t);break;case"subroutine":g[t.key]=new x(l,t);break;case"condition":g[t.key]=new y(l,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var l=new s(t,i);this.diagram=l;var g={};!function f(t,i,s){var o=e(t);return r.start===t?l.startWith(o):i&&s&&!i.pathOk&&(i instanceof y?(s.yes===t&&i.yes(o),s.no===t&&i.no(o)):i.then(o)),o.pathOk?o:(o instanceof y?(t.yes&&f(t.yes,o,t),t.no&&f(t.no,o,t)):t.next&&f(t.next,o,t),o)}(this.start),l.render()},clean:function(){this.diagram.clean()}},l=[],g=0,f=1,p=t.length;f")<0&&m.indexOf("=>")<0?(l[u-1]+="\n"+m,l.splice(u,1),d--):u++}for(;l.length>0;){var b=l.splice(0,1)[0].trim();if(b.indexOf("=>")>=0){var v,w=b.split("=>"),k={key:w[0],symbolType:w[1],text:null,link:null,target:null,flowstate:null};if(k.symbolType.indexOf(": ")>=0&&(v=k.symbolType.split(": "),k.symbolType=v.shift(),k.text=v.join(": ")),k.text&&k.text.indexOf(":>")>=0?(v=k.text.split(":>"),k.text=v.shift(),k.link=v.join(":>")):k.symbolType.indexOf(":>")>=0&&(v=k.symbolType.split(":>"),k.symbolType=v.shift(),k.link=v.join(":>")),k.symbolType.indexOf("\n")>=0&&(k.symbolType=k.symbolType.split("\n")[0]),k.link){var _=k.link.indexOf("[")+1,B=k.link.indexOf("]");_>=0&&B>=0&&(k.target=k.link.substring(_,B),k.link=k.link.substring(0,_-1))}if(k.text&&k.text.indexOf("|")>=0){var A=k.text.split("|");k.flowstate=A.pop().trim(),k.text=A.join("|")}r.symbols[k.key]=k}else if(b.indexOf("->")>=0)for(var L=b.split("->"),M=0,O=L.length;M=0){var S=Y.split(",");Y=S[0],C=S[1].trim()}if(r.start||(r.start=T),M+1r.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),s())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=o(i,n),this.symbols=[],this.lines=[],this.start=null}var s=e(15),o=e(1).defaults,n=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,o=0,n=0,h=0,a=0,x=0;for(s=0,o=this.symbols.length;se&&(e=t.width),t.height>r&&(r=t.height);for(s=0,o=this.symbols.length;sn&&(n=y),l>h&&(h=l);for(s=0,o=this.lines.length;sn&&(n=g),f>h&&(h=f)}var p=this.options.scale,c=this.options["line-width"];a<0&&(a-=c),x<0&&(x-=c);var u=n+c-a,d=h+c-x;this.paper.setSize(u*p,d*p),this.paper.setViewBox(a,x,u,d,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);s>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,n=r/2,a={x:o,y:n},x=[{x:o-this.textMargin,y:r},{x:o-this.textMargin+e,y:r},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:n}],y=h(t,a,x);y.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&y.attr("href",i.link),i.target&&y.attr("target",i.target),i.key&&(y.node.id=i.key),y.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:y.getBBox().height/2}),this.group.push(y),y.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,n=e(3),h=n.drawPath;o(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var o=this.getAttr("font"),n=this.getAttr("font-family"),h=this.getAttr("font-weight");o&&r.attr({font:o}),n&&r.attr({"font-family":n}),h&&r.attr({"font-weight":h}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); //# sourceMappingURL=flowchart.min.js.map \ No newline at end of file diff --git a/release/flowchart.min.js.map b/release/flowchart.min.js.map index 36f0ea88..2112af98 100644 --- a/release/flowchart.min.js.map +++ b/release/flowchart.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 614f32ecc8b2aa5b1933","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0];\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t var x = line.x;\n\t var y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 614f32ecc8b2aa5b1933\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n var x = line.x;\n var y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap fa31ed635fd738c1296d","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].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],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap fa31ed635fd738c1296d\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/releasenotes.md b/releasenotes.md index b55ac5bb..7e97e477 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,7 @@ +### v1.6.6 + +- Fix disruptive space char when parsing [##105](https://github.com/adrai/flowchart.js/pull/#105) + ### v1.6.5 - set proper engine version in package.json diff --git a/site b/site index 0db38791..02d75774 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 0db387911f818da0cca45757a5717c880dcc7ce5 +Subproject commit 02d7577472e5e170ca453653fa22175a5e444d18 diff --git a/src/flowchart.chart.js b/src/flowchart.chart.js index ac321c0f..e8d4d90c 100644 --- a/src/flowchart.chart.js +++ b/src/flowchart.chart.js @@ -94,10 +94,13 @@ FlowChart.prototype.render = function() { maxX = this.maxXFromLine; + var x; + var y; + for (i = 0, len = this.symbols.length; i < len; i++) { symbol = this.symbols[i]; - var x = symbol.getX() + symbol.width; - var y = symbol.getY() + symbol.height; + x = symbol.getX() + symbol.width; + y = symbol.getY() + symbol.height; if (x > maxX) { maxX = x; } @@ -108,8 +111,8 @@ FlowChart.prototype.render = function() { for (i = 0, len = this.lines.length; i < len; i++) { line = this.lines[i].getBBox(); - var x = line.x; - var y = line.y; + x = line.x; + y = line.y; var x2 = line.x2; var y2 = line.y2; if (x < minX) { From d46e9e84e90a2bde9df6626953d4229a285385b0 Mon Sep 17 00:00:00 2001 From: Emanuele Mazzotta Date: Sun, 14 May 2017 00:32:30 +0200 Subject: [PATCH 031/117] Use markdown syntax for headings --- README.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 1d5c9d13..3cb6c3f4 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,18 @@ [![JS.ORG](https://img.shields.io/badge/js.org-flowchart-ffb400.svg?style=flat-square)](http://js.org) -#Example +# flowchart.js + +## Example [example](https://github.com/adrai/flowchart.js/blob/master/example/index.html) -#Requirements +## Requirements You will need [Raphaël](http://www.raphaeljs.com/) -#CDN +## CDN flowchart.js is on [CDNJS](https://cdnjs.com/libraries/flowchart), feel free to use it -#Usage +## Usage On your page you need to include raphael like so: @@ -85,18 +87,18 @@ and then ``` -#Advice +## Advice Symbols that should possibly not be used in the text: '=>' and '->' and ':>' and '|' -#Contributors +## Contributors via [GitHub](https://github.com/adrai/flowchart.js/graphs/contributors) -#Thanks +## Thanks Many thanks to [js-sequence-diagrams](http://bramp.github.io/js-sequence-diagrams/) which greatly inspired this project, and forms the basis for the syntax. -#Licence +## Licence Copyright (c) 2017 Adriano Raiano From 447863edc1ffbb1fcb76b45c24c7347c6337a864 Mon Sep 17 00:00:00 2001 From: Bertrand Martel Date: Sun, 27 Aug 2017 20:37:39 +0200 Subject: [PATCH 032/117] add parameter to disable vertical alignment of condition symbol (#115) (#116) * add parameter to disable vertical alignment of condition symbol (#115) * add note about disabling vertical-alignment in readme --- README.md | 2 +- src/flowchart.parse.js | 17 +++++++++++++++-- src/flowchart.symbol.condition.js | 11 +++++++---- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 3cb6c3f4..fa4ff05d 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ and then 'e=>end:>http://www.google.com\n' + 'op1=>operation: My Operation\n' + 'sub1=>subroutine: My Subroutine\n' + - 'cond=>condition: Yes \n' + + 'cond=>condition: Yes \n' + // use cond(align-next=no) to disable vertical align of symbols below 'or No?\n:>http://www.google.com' + 'io=>inputoutput|request: catch something...\n' + '' + diff --git a/src/flowchart.parse.js b/src/flowchart.parse.js index 79086a9e..b9511533 100644 --- a/src/flowchart.parse.js +++ b/src/flowchart.parse.js @@ -155,14 +155,27 @@ function parse(input) { // definition var parts = line.split('=>'); var symbol = { - key: parts[0], + key: parts[0].replace(/\(.*\)/, ''), symbolType: parts[1], text: null, link: null, target: null, - flowstate: null + flowstate: null, + params: {} }; + //parse parameters + var params = parts[0].match(/\((.*)\)/); + if (params && params.length > 1){ + var entries = params[1].split(','); + for(var i = 0; i < entries.length; i++) { + var entry = entries[0].split('='); + if (entry.length == 2){ + symbol.params[entry[0]] = entry[1]; + } + } + } + var sub; if (symbol.symbolType.indexOf(': ') >= 0) { diff --git a/src/flowchart.symbol.condition.js b/src/flowchart.symbol.condition.js index 27cb5c7c..72d3941c 100644 --- a/src/flowchart.symbol.condition.js +++ b/src/flowchart.symbol.condition.js @@ -9,6 +9,7 @@ function Condition(chart, options) { this.textMargin = this.getAttr('text-margin'); this.yes_direction = 'bottom'; this.no_direction = 'right'; + this.params = options.params; if (options.yes && options.direction_yes && options.no && !options.direction_no) { if (options.direction_yes === 'right') { this.no_direction = 'bottom'; @@ -120,10 +121,12 @@ Condition.prototype.render = function() { for (var i = 0, len = self.chart.symbols.length; i < len; i++) { symb = self.chart.symbols[i]; - var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); - if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) { - hasSymbolUnder = true; - break; + if (!self.params['align-next'] || self.params['align-next'] !== 'no') { + var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); + if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) { + hasSymbolUnder = true; + break; + } } } From e8c49c87f58b2efea367ffdc730ff8c0fb1d6f6c Mon Sep 17 00:00:00 2001 From: Bertrand Martel Date: Sun, 27 Aug 2017 20:38:42 +0200 Subject: [PATCH 033/117] add line style flow support (#113) (#114) --- src/flowchart.parse.js | 25 ++++++++++++++++++++++++- src/flowchart.symbol.js | 7 +++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/flowchart.parse.js b/src/flowchart.parse.js index b9511533..9a7519e5 100644 --- a/src/flowchart.parse.js +++ b/src/flowchart.parse.js @@ -115,7 +115,7 @@ function parse(input) { for (var l = 1, len = lines.length; l < len;) { var currentLine = lines[l]; - if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) { + if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) { lines[l - 1] += '\n' + currentLine; lines.splice(l, 1); len--; @@ -124,6 +124,15 @@ function parse(input) { } } + function getStyle(s){ + var startIndex = s.indexOf('(') + 1; + var endIndex = s.indexOf(')'); + if (startIndex >= 0 && endIndex >= 0) { + return s.substring(startIndex,endIndex); + } + return '{}'; + } + function getSymbol(s) { var startIndex = s.indexOf('(') + 1; var endIndex = s.indexOf(')'); @@ -161,6 +170,7 @@ function parse(input) { link: null, target: null, flowstate: null, + lineStyle: {}, params: {} }; @@ -248,6 +258,19 @@ function parse(input) { direction = null; } } + } else if (line.indexOf('@>') >= 0) { + + // line style + var lineStyleSymbols = line.split('@>'); + for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) { + + if ((i+1) != lenS){ + var curSymb = getSymbol(lineStyleSymbols[i]); + var nextSymb = getSymbol(lineStyleSymbols[i+1]) + + curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i+1])); + } + } } } diff --git a/src/flowchart.symbol.js b/src/flowchart.symbol.js index fd70d368..06653421 100644 --- a/src/flowchart.symbol.js +++ b/src/flowchart.symbol.js @@ -9,6 +9,8 @@ function Symbol(chart, options, symbol) { this.connectedTo = []; this.symbolType = options.symbolType; this.flowstate = (options.flowstate || 'future'); + this.lineStyle = (options.lineStyle || {}); + this.key = (options.key || ''); this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined; @@ -368,6 +370,11 @@ Symbol.prototype.drawLineTo = function(symbol, text, origin) { maxX = left.x; } + //update line style + if (this.lineStyle[symbol.key] && line){ + line.attr( this.lineStyle[symbol.key]); + } + if (line) { for (var l = 0, llen = this.chart.lines.length; l < llen; l++) { var otherLine = this.chart.lines[l]; From 1dd22b742acf31be9902e089c128e482239076cb Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Sun, 27 Aug 2017 21:26:52 +0200 Subject: [PATCH 034/117] bump new version --- README.md | 8 +++- example/index.html | 3 +- package.json | 2 +- release/flowchart.js | 87 +++++++++++++++++++++--------------- release/flowchart.js.map | 2 +- release/flowchart.min.js | 4 +- release/flowchart.min.js.map | 2 +- releasenotes.md | 13 ++++-- site | 2 +- 9 files changed, 75 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index fa4ff05d..86d1a2b6 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,13 @@ and then ``` ## Advice -Symbols that should possibly not be used in the text: '=>' and '->' and ':>' and '|' +Symbols that should possibly not be used in the text: '=>' and '->' and ':>' and '|' and '@>' + +If you want to emphasize a specific path in your flowchart, you can additionally define it like this: + +``` +st@>op1({"stroke":"Red"})@>cond({"stroke":"Red","stroke-width":6,"arrow-end":"classic-wide-long"})@>c2({"stroke":"Red"})@>op2({"stroke":"Red"})@>e({"stroke":"Red"}) +``` ## Contributors diff --git a/example/index.html b/example/index.html index 5eacb3d6..3dc10154 100644 --- a/example/index.html +++ b/example/index.html @@ -90,7 +90,8 @@ cond(no)->sub1(left)->op1 c2(yes)->io->e c2(no)->op2->e - + +st@>op1({"stroke":"Red"})@>cond({"stroke":"Red","stroke-width":6,"arrow-end":"classic-wide-long"})@>c2({"stroke":"Red"})@>op2({"stroke":"Red"})@>e({"stroke":"Red"})
diff --git a/package.json b/package.json index 470fba31..91c49fd1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.6.6", + "version": "1.7.0", "main": "./index", "private": false, "engines": { diff --git a/release/flowchart.js b/release/flowchart.js index 044ac031..79d507e1 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,4 +1,4 @@ -// flowchart.js, v1.6.6 +// flowchart.js, v1.7.0 // Copyright (c)2017 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js @@ -130,7 +130,7 @@ function Symbol(chart, options, symbol) { this.chart = chart, this.group = this.chart.paper.set(), this.symbol = symbol, this.connectedTo = [], this.symbolType = options.symbolType, this.flowstate = options.flowstate || "future", - this.next_direction = options.next && options.direction_next ? options.direction_next : void 0, + this.lineStyle = options.lineStyle || {}, this.key = options.key || "", this.next_direction = options.next && options.direction_next ? options.direction_next : void 0, this.text = this.chart.paper.text(0, 0, options.text), //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t options.key && (this.text.node.id = options.key + "t"), this.text.node.setAttribute("class", this.getAttr("class") + "t"), this.text.attr({ @@ -149,7 +149,7 @@ }), options.link && this.text.attr("href", options.link), options.target && this.text.attr("target", options.target); var maxWidth = this.getAttr("maxWidth"); if (maxWidth) { - for (var words = options.text.split(" "), tempText = "", i = 0, ii = words.length; i < ii; i++) { + for (var words = options.text.split(" "), tempText = "", i = 0, ii = words.length; ii > i; i++) { var word = words[i]; this.text.attr("text", tempText + " " + word), tempText += this.text.getBBox().width > maxWidth ? "\n" + word : " " + word; } @@ -231,7 +231,7 @@ this.next.setY(rightPoint.y - this.next.height / 2), this.next.shiftX(this.group.getBBox().x + this.width + lineLength); var self = this; !function shift() { - for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) { + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; len > i; i++) { symb = self.chart.symbols[i]; var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x); if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width / 2) { @@ -253,7 +253,7 @@ this.next && (this.next_direction ? this.drawLineTo(this.next, "", this.next_direction) : this.drawLineTo(this.next)); }, Symbol.prototype.drawLineTo = function(symbol, text, origin) { this.connectedTo.indexOf(symbol) < 0 && this.connectedTo.push(symbol); - var line, x = this.getCenter().x, y = this.getCenter().y, right = this.getRight(), bottom = this.getBottom(), left = this.getLeft(), symbolX = symbol.getCenter().x, symbolY = symbol.getCenter().y, symbolTop = symbol.getTop(), symbolRight = symbol.getRight(), symbolLeft = symbol.getLeft(), isOnSameColumn = x === symbolX, isOnSameLine = y === symbolY, isUnder = y < symbolY, isUpper = y > symbolY || this === symbol, isLeft = x > symbolX, isRight = x < symbolX, maxX = 0, lineLength = this.getAttr("line-length"), lineWith = this.getAttr("line-width"); + var line, x = this.getCenter().x, y = this.getCenter().y, right = this.getRight(), bottom = this.getBottom(), left = this.getLeft(), symbolX = symbol.getCenter().x, symbolY = symbol.getCenter().y, symbolTop = symbol.getTop(), symbolRight = symbol.getRight(), symbolLeft = symbol.getLeft(), isOnSameColumn = x === symbolX, isOnSameLine = y === symbolY, isUnder = symbolY > y, isUpper = y > symbolY || this === symbol, isLeft = x > symbolX, isRight = symbolX > x, maxX = 0, lineLength = this.getAttr("line-length"), lineWith = this.getAttr("line-width"); if (origin && "bottom" !== origin || !isOnSameColumn || !isUnder) if (origin && "right" !== origin || !isOnSameLine || !isRight) if (origin && "left" !== origin || !isOnSameLine || !isLeft) if (origin && "right" !== origin || !isOnSameColumn || !isUpper) if (origin && "right" !== origin || !isOnSameColumn || !isUnder) if (origin && "bottom" !== origin || !isLeft) if (origin && "bottom" !== origin || !isRight) if (origin && "right" === origin && isLeft) line = drawLine(this.chart, right, [ { x: right.x + lineLength / 2, y: right.y @@ -381,11 +381,12 @@ this.leftStart = !0, symbol.rightEnd = !0, maxX = symbolRight.x; else line = drawLine(this.chart, right, symbolLeft, text), this.rightStart = !0, symbol.leftEnd = !0, maxX = symbolLeft.x; else line = drawLine(this.chart, bottom, symbolTop, text), this.bottomStart = !0, symbol.topEnd = !0, maxX = bottom.x; - if (line) { - for (var l = 0, llen = this.chart.lines.length; l < llen; l++) for (var len, otherLine = this.chart.lines[l], ePath = otherLine.attr("path"), lPath = line.attr("path"), iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) { + if (//update line style + this.lineStyle[symbol.key] && line && line.attr(this.lineStyle[symbol.key]), line) { + for (var l = 0, llen = this.chart.lines.length; llen > l; l++) for (var len, otherLine = this.chart.lines[l], ePath = otherLine.attr("path"), lPath = line.attr("path"), iP = 0, lenP = ePath.length - 1; lenP > iP; iP++) { var newPath = []; newPath.push([ "M", ePath[iP][1], ePath[iP][2] ]), newPath.push([ "L", ePath[iP + 1][1], ePath[iP + 1][2] ]); - for (var line1_from_x = newPath[0][1], line1_from_y = newPath[0][2], line1_to_x = newPath[1][1], line1_to_y = newPath[1][2], lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) { + for (var line1_from_x = newPath[0][1], line1_from_y = newPath[0][2], line1_to_x = newPath[1][1], line1_to_y = newPath[1][2], lP = 0, lenlP = lPath.length - 1; lenlP > lP; lP++) { var newLinePath = []; newLinePath.push([ "M", lPath[lP][1], lPath[lP][2] ]), newLinePath.push([ "L", lPath[lP + 1][1], lPath[lP + 1][2] ]); var line2_from_x = newLinePath[0][1], line2_from_y = newLinePath[0][2], line2_to_x = newLinePath[1][1], line2_to_y = newLinePath[1][2], 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); @@ -415,9 +416,9 @@ function(module, exports) { function drawPath(chart, location, points) { var i, len, path = "M{0},{1}"; - for (i = 2, len = 2 * points.length + 2; i < len; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; + for (i = 2, len = 2 * points.length + 2; len > i; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; var pathValues = [ location.x, location.y ]; - for (i = 0, len = points.length; i < len; i++) pathValues.push(points[i].x), pathValues.push(points[i].y); + for (i = 0, len = points.length; len > i; i++) pathValues.push(points[i].x), pathValues.push(points[i].y); var symbol = chart.paper.path(path, pathValues); symbol.attr("stroke", chart.options["element-color"]), symbol.attr("stroke-width", chart.options["line-width"]); var font = chart.options.font, fontF = chart.options["font-family"], fontW = chart.options["font-weight"]; @@ -433,9 +434,9 @@ var i, len; "[object Array]" !== Object.prototype.toString.call(to) && (to = [ to ]); var path = "M{0},{1}"; - for (i = 2, len = 2 * to.length + 2; i < len; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; + for (i = 2, len = 2 * to.length + 2; len > i; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; var pathValues = [ from.x, from.y ]; - for (i = 0, len = to.length; i < len; i++) pathValues.push(to[i].x), pathValues.push(to[i].y); + for (i = 0, len = to.length; len > i; i++) pathValues.push(to[i].x), pathValues.push(to[i].y); var line = chart.paper.path(path, pathValues); line.attr({ stroke: chart.options["line-color"], @@ -494,8 +495,8 @@ 0 === denominator ? result : (a = line1StartY - line2StartY, b = line1StartX - line2StartX, numerator1 = (line2EndX - line2StartX) * a - (line2EndY - line2StartY) * b, numerator2 = (line1EndX - line1StartX) * a - (line1EndY - line1StartY) * b, a = numerator1 / denominator, b = numerator2 / denominator, result.x = line1StartX + a * (line1EndX - line1StartX), - result.y = line1StartY + a * (line1EndY - line1StartY), a > 0 && a < 1 && (result.onLine1 = !0), - b > 0 && b < 1 && (result.onLine2 = !0), result); + result.y = line1StartY + a * (line1EndY - line1StartY), a > 0 && 1 > a && (result.onLine1 = !0), + b > 0 && 1 > b && (result.onLine2 = !0), result); } module.exports = { drawPath: drawPath, @@ -509,6 +510,10 @@ /***/ function(module, exports, __webpack_require__) { function parse(input) { + function getStyle(s) { + var startIndex = s.indexOf("(") + 1, endIndex = s.indexOf(")"); + return startIndex >= 0 && endIndex >= 0 ? s.substring(startIndex, endIndex) : "{}"; + } function getSymbol(s) { var startIndex = s.indexOf("(") + 1, endIndex = s.indexOf(")"); return startIndex >= 0 && endIndex >= 0 ? chart.symbols[s.substring(0, startIndex - 1)] : chart.symbols[s]; @@ -572,28 +577,35 @@ clean: function() { this.diagram.clean(); } - }, lines = [], prevBreak = 0, i0 = 1, i0len = input.length; i0 < i0len; i0++) if ("\n" === input[i0] && "\\" !== input[i0 - 1]) { + }, lines = [], prevBreak = 0, i0 = 1, i0len = input.length; i0len > i0; i0++) if ("\n" === input[i0] && "\\" !== input[i0 - 1]) { var line0 = input.substring(prevBreak, i0); prevBreak = i0 + 1, lines.push(line0.replace(/\\\n/g, "\n")); } prevBreak < input.length && lines.push(input.substr(prevBreak)); - for (var l = 1, len = lines.length; l < len; ) { + for (var l = 1, len = lines.length; len > l; ) { var currentLine = lines[l]; - currentLine.indexOf("->") < 0 && currentLine.indexOf("=>") < 0 ? (lines[l - 1] += "\n" + currentLine, + currentLine.indexOf("->") < 0 && currentLine.indexOf("=>") < 0 && currentLine.indexOf("@>") < 0 ? (lines[l - 1] += "\n" + currentLine, lines.splice(l, 1), len--) : l++; } for (;lines.length > 0; ) { var line = lines.splice(0, 1)[0].trim(); if (line.indexOf("=>") >= 0) { // definition - var sub, parts = line.split("=>"), symbol = { - key: parts[0], + var parts = line.split("=>"), symbol = { + key: parts[0].replace(/\(.*\)/, ""), symbolType: parts[1], text: null, link: null, target: null, - flowstate: null - }; + flowstate: null, + lineStyle: {}, + params: {} + }, params = parts[0].match(/\((.*)\)/); + if (params && params.length > 1) for (var entries = params[1].split(","), i = 0; i < entries.length; i++) { + var entry = entries[0].split("="); + 2 == entry.length && (symbol.params[entry[0]] = entry[1]); + } + var sub; /* adding support for links */ if (symbol.symbolType.indexOf(": ") >= 0 && (sub = symbol.symbolType.split(": "), symbol.symbolType = sub.shift(), symbol.text = sub.join(": ")), symbol.text && symbol.text.indexOf(":>") >= 0 ? (sub = symbol.text.split(":>"), @@ -612,17 +624,20 @@ } /* end of flowstate support */ chart.symbols[symbol.key] = symbol; - } else if (line.indexOf("->") >= 0) for (var flowSymbols = line.split("->"), i = 0, lenS = flowSymbols.length; i < lenS; i++) { + } else if (line.indexOf("->") >= 0) for (var flowSymbols = line.split("->"), i = 0, lenS = flowSymbols.length; lenS > i; i++) { var flowSymb = flowSymbols[i], realSymb = getSymbol(flowSymb), next = getNextPath(flowSymb), direction = null; if (next.indexOf(",") >= 0) { var condOpt = next.split(","); next = condOpt[0], direction = condOpt[1].trim(); } - if (chart.start || (chart.start = realSymb), i + 1 < lenS) { + if (chart.start || (chart.start = realSymb), lenS > i + 1) { var nextSymb = flowSymbols[i + 1]; realSymb[next] = getSymbol(nextSymb), realSymb["direction_" + next] = direction, direction = null; } + } else if (line.indexOf("@>") >= 0) for (var lineStyleSymbols = line.split("@>"), i = 0, lenS = lineStyleSymbols.length; lenS > i; i++) if (i + 1 != lenS) { + var curSymb = getSymbol(lineStyleSymbols[i]), nextSymb = getSymbol(lineStyleSymbols[i + 1]); + curSymb.lineStyle[nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1])); } } return chart; @@ -637,7 +652,8 @@ function(module, exports, __webpack_require__) { function Condition(chart, options) { options = options || {}, Symbol.call(this, chart, options), this.textMargin = this.getAttr("text-margin"), - this.yes_direction = "bottom", this.no_direction = "right", options.yes && options.direction_yes && options.no && !options.direction_no ? "right" === options.direction_yes ? (this.no_direction = "bottom", + this.yes_direction = "bottom", this.no_direction = "right", this.params = options.params, + options.yes && options.direction_yes && options.no && !options.direction_no ? "right" === options.direction_yes ? (this.no_direction = "bottom", this.yes_direction = "right") : (this.no_direction = "right", this.yes_direction = "bottom") : options.yes && !options.direction_yes && options.no && options.direction_no ? "right" === options.direction_no ? (this.yes_direction = "bottom", this.no_direction = "right") : (this.yes_direction = "right", this.no_direction = "bottom") : (this.yes_direction = "bottom", this.no_direction = "right"), this.yes_direction = this.yes_direction || "bottom", @@ -698,8 +714,8 @@ this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2), this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength); var self = this; !function shift() { - for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) { - symb = self.chart.symbols[i]; + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; len > i; i++) if (symb = self.chart.symbols[i], + !self.params["align-next"] || "no" !== self.params["align-next"]) { var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) { hasSymbolUnder = !0; @@ -742,27 +758,27 @@ return this.start = symbol, this.handle(symbol); }, FlowChart.prototype.render = function() { var symbol, line, maxWidth = 0, maxHeight = 0, i = 0, len = 0, maxX = 0, maxY = 0, minX = 0, minY = 0; - for (i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], symbol.width > maxWidth && (maxWidth = symbol.width), + for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.width > maxWidth && (maxWidth = symbol.width), symbol.height > maxHeight && (maxHeight = symbol.height); - for (i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], symbol.shiftX(this.options.x + (maxWidth - symbol.width) / 2 + this.options["line-width"]), + for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.shiftX(this.options.x + (maxWidth - symbol.width) / 2 + this.options["line-width"]), symbol.shiftY(this.options.y + (maxHeight - symbol.height) / 2 + this.options["line-width"]); // for (i = 0, len = this.symbols.length; i < len; i++) { // symbol = this.symbols[i]; // symbol.render(); // } - for (this.start.render(), i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], + for (this.start.render(), i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.renderLines(); maxX = this.maxXFromLine; var x, y; - for (i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], x = symbol.getX() + symbol.width, + for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], x = symbol.getX() + symbol.width, y = symbol.getY() + symbol.height, x > maxX && (maxX = x), y > maxY && (maxY = y); - for (i = 0, len = this.lines.length; i < len; i++) { + for (i = 0, len = this.lines.length; len > i; i++) { line = this.lines[i].getBBox(), x = line.x, y = line.y; var x2 = line.x2, y2 = line.y2; - x < minX && (minX = x), y < minY && (minY = y), x2 > maxX && (maxX = x2), y2 > maxY && (maxY = y2); + minX > x && (minX = x), minY > y && (minY = y), x2 > maxX && (maxX = x2), y2 > maxY && (maxY = y2); } var scale = this.options.scale, lineWidth = this.options["line-width"]; - minX < 0 && (minX -= lineWidth), minY < 0 && (minY -= lineWidth); + 0 > minX && (minX -= lineWidth), 0 > minY && (minY -= lineWidth); var width = maxX + lineWidth - minX, height = maxY + lineWidth - minY; this.paper.setSize(width * scale, height * scale), this.paper.setViewBox(minX, minY, width, height, !0); }, FlowChart.prototype.clean = function() { @@ -819,10 +835,9 @@ var t = Object(this), len = t.length >>> 0; if (0 === len) return -1; var n = 0; - if (arguments.length > 0 && (n = Number(arguments[1]), n != n ? // shortcut for verifying if it's NaN - n = 0 : 0 !== n && n != 1 / 0 && n != -(1 / 0) && (n = (n > 0 || -1) * Math.floor(Math.abs(n)))), + if (arguments.length > 0 && (n = Number(arguments[1]), n != n ? n = 0 : 0 !== n && n != 1 / 0 && n != -(1 / 0) && (n = (n > 0 || -1) * Math.floor(Math.abs(n)))), n >= len) return -1; - for (var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); k < len; k++) if (k in t && t[k] === searchElement) return k; + for (var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); len > k; k++) if (k in t && t[k] === searchElement) return k; return -1; }), // add lastIndexOf to non ECMA-262 standard compliant browsers Array.prototype.lastIndexOf || (Array.prototype.lastIndexOf = function(searchElement) { diff --git a/release/flowchart.js.map b/release/flowchart.js.map index 8386b012..717d04ac 100644 --- a/release/flowchart.js.map +++ b/release/flowchart.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 156f276ff40c858ca0b6","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].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],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 156f276ff40c858ca0b6\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap d55f3eebb0d5595906d9","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","params","match","entries","entry","sub","join","txtAndState","pop","flowSymbols","lenS","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t //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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && 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 getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\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\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/***/ },\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 {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap d55f3eebb0d5595906d9\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n //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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && 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 getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\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\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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n 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 {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index 9d1cb4fc..e7507e37 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,7 +1,7 @@ -// flowchart.js, v1.6.6 +// flowchart.js, v1.7.0 // Copyright (c)2017 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js -!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(8);var r=e(4);e(14);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),o=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var n=this.getAttr("maxWidth");if(n){for(var h=i.text.split(" "),a="",x=0,y=h.length;xn?"\n"+l:" "+l}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*g,height:this.text.getBBox().height+2*g}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),o=s.drawLine,n=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function s(){for(var i,r=!1,o=0,n=e.chart.symbols.length;oe.next.getCenter().y&&h<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),s())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,"",this.next_direction):this.drawLineTo(this.next))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),y=this.getLeft(),l=t.getCenter().x,g=t.getCenter().y,f=t.getTop(),p=t.getRight(),c=t.getLeft(),u=s===l,d=h===g,m=hg||this===t,v=s>l,w=sq?($=["L",Q.x+2*B,V],Y.splice(F+1,0,$),$=["C",Q.x+2*B,V,Q.x,V-4*B,Q.x-2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",Q.x-2*B,V],Y.splice(F+1,0,$),$=["C",Q.x-2*B,V,Q.x,V-4*B,Q.x+2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):V>G?($=["L",N,Q.y+2*B],Y.splice(F+1,0,$),$=["C",N,Q.y+2*B,N+4*B,Q.y,N,Q.y-2*B],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",N,Q.y-2*B],Y.splice(F+1,0,$),$=["C",N,Q.y-2*B,N+4*B,Q.y,N,Q.y+2*B],Y.splice(F+2,0,$),r.attr("path",Y)),F+=2,O+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,o="M{0},{1}";for(r=2,s=2*e.length+2;rc.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"])),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),y&&f.attr({"font-family":y}),l&&f.attr({"font-weight":l})}return a}function s(t,i,e,r,s,o,n,h){var a,x,y,l,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-o)*(e-t)-(n-s)*(r-i),0===a?f:(x=i-o,y=t-s,l=(n-s)*x-(h-o)*y,g=(e-t)*x-(r-i)*y,x=l/a,y=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&x<1&&(f.onLine1=!0),y>0&&y<1&&(f.onLine2=!0),f)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?r.symbols[t.substring(0,i-1)]:r.symbols[t]}function e(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=X.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var r={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(l,t);break;case"end":g[t.key]=new n(l,t);break;case"operation":g[t.key]=new h(l,t);break;case"inputoutput":g[t.key]=new a(l,t);break;case"subroutine":g[t.key]=new x(l,t);break;case"condition":g[t.key]=new y(l,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var l=new s(t,i);this.diagram=l;var g={};!function f(t,i,s){var o=e(t);return r.start===t?l.startWith(o):i&&s&&!i.pathOk&&(i instanceof y?(s.yes===t&&i.yes(o),s.no===t&&i.no(o)):i.then(o)),o.pathOk?o:(o instanceof y?(t.yes&&f(t.yes,o,t),t.no&&f(t.no,o,t)):t.next&&f(t.next,o,t),o)}(this.start),l.render()},clean:function(){this.diagram.clean()}},l=[],g=0,f=1,p=t.length;f")<0&&m.indexOf("=>")<0?(l[u-1]+="\n"+m,l.splice(u,1),d--):u++}for(;l.length>0;){var b=l.splice(0,1)[0].trim();if(b.indexOf("=>")>=0){var v,w=b.split("=>"),k={key:w[0],symbolType:w[1],text:null,link:null,target:null,flowstate:null};if(k.symbolType.indexOf(": ")>=0&&(v=k.symbolType.split(": "),k.symbolType=v.shift(),k.text=v.join(": ")),k.text&&k.text.indexOf(":>")>=0?(v=k.text.split(":>"),k.text=v.shift(),k.link=v.join(":>")):k.symbolType.indexOf(":>")>=0&&(v=k.symbolType.split(":>"),k.symbolType=v.shift(),k.link=v.join(":>")),k.symbolType.indexOf("\n")>=0&&(k.symbolType=k.symbolType.split("\n")[0]),k.link){var _=k.link.indexOf("[")+1,B=k.link.indexOf("]");_>=0&&B>=0&&(k.target=k.link.substring(_,B),k.link=k.link.substring(0,_-1))}if(k.text&&k.text.indexOf("|")>=0){var A=k.text.split("|");k.flowstate=A.pop().trim(),k.text=A.join("|")}r.symbols[k.key]=k}else if(b.indexOf("->")>=0)for(var L=b.split("->"),M=0,O=L.length;M=0){var S=Y.split(",");Y=S[0],C=S[1].trim()}if(r.start||(r.start=T),M+1r.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),s())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=o(i,n),this.symbols=[],this.lines=[],this.start=null}var s=e(15),o=e(1).defaults,n=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,o=0,n=0,h=0,a=0,x=0;for(s=0,o=this.symbols.length;se&&(e=t.width),t.height>r&&(r=t.height);for(s=0,o=this.symbols.length;sn&&(n=y),l>h&&(h=l);for(s=0,o=this.lines.length;sn&&(n=g),f>h&&(h=f)}var p=this.options.scale,c=this.options["line-width"];a<0&&(a-=c),x<0&&(x-=c);var u=n+c-a,d=h+c-x;this.paper.setSize(u*p,d*p),this.paper.setViewBox(a,x,u,d,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);s>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,n=r/2,a={x:o,y:n},x=[{x:o-this.textMargin,y:r},{x:o-this.textMargin+e,y:r},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:n}],y=h(t,a,x);y.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&y.attr("href",i.link),i.target&&y.attr("target",i.target),i.key&&(y.node.id=i.key),y.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:y.getBBox().height/2}),this.group.push(y),y.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,n=e(3),h=n.drawPath;o(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var o=this.getAttr("font"),n=this.getAttr("font-family"),h=this.getAttr("font-weight");o&&r.attr({font:o}),n&&r.attr({"font-family":n}),h&&r.attr({"font-weight":h}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); +!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(8);var r=e(4);e(14);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),n=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),n&&this.text.attr({"font-weight":n}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var o=this.getAttr("maxWidth");if(o){for(var h=i.text.split(" "),a="",x=0,l=h.length;l>x;x++){var y=h[x];this.text.attr("text",a+" "+y),a+=this.text.getBBox().width>o?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*g,height:this.text.getBBox().height+2*g}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),n=s.drawLine,o=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function s(){for(var i,r=!1,n=0,o=e.chart.symbols.length;o>n;n++){i=e.chart.symbols[n];var h=Math.abs(i.getCenter().x-e.next.getCenter().x);if(i.getCenter().y>e.next.getCenter().y&&h<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),s())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,"",this.next_direction):this.drawLineTo(this.next))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),l=this.getLeft(),y=t.getCenter().x,g=t.getCenter().y,f=t.getTop(),p=t.getRight(),c=t.getLeft(),u=s===y,d=h===g,m=g>h,b=h>g||this===t,v=s>y,w=y>s,k=0,_=this.getAttr("line-length"),B=this.getAttr("line-width");if(e&&"bottom"!==e||!u||!m)if(e&&"right"!==e||!d||!w)if(e&&"left"!==e||!d||!v)if(e&&"right"!==e||!u||!b)if(e&&"right"!==e||!u||!m)if(e&&"bottom"!==e||!v)if(e&&"bottom"!==e||!w)if(e&&"right"===e&&v)r=n(this.chart,a,[{x:a.x+_/2,y:a.y},{x:a.x+_/2,y:f.y-_/2},{x:f.x,y:f.y-_/2},{x:f.x,y:f.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+_/2;else if(e&&"right"===e&&w)r=n(this.chart,a,[{x:f.x,y:a.y},{x:f.x,y:f.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+_/2;else if(e&&"bottom"===e&&u&&b)r=n(this.chart,x,[{x:x.x,y:x.y+_/2},{x:a.x+_/2,y:x.y+_/2},{x:a.x+_/2,y:f.y-_/2},{x:f.x,y:f.y-_/2},{x:f.x,y:f.y}],i),this.bottomStart=!0,t.topEnd=!0,k=x.x+_/2;else if("left"===e&&u&&b){var A=l.x-_/2;c.xO;O++)for(var M,X=this.chart.lines[O],S=X.attr("path"),T=r.attr("path"),Y=0,C=S.length-1;C>Y;Y++){var j=[];j.push(["M",S[Y][1],S[Y][2]]),j.push(["L",S[Y+1][1],S[Y+1][2]]);for(var E=j[0][1],z=j[0][2],P=j[1][1],R=j[1][2],F=0,I=T.length-1;I>F;F++){var N=[];N.push(["M",T[F][1],T[F][2]]),N.push(["L",T[F+1][1],T[F+1][2]]);var W=N[0][1],V=N[0][2],q=N[1][1],G=N[1][2],Q=o(E,z,P,R,W,V,q,G);if(Q.onLine1&&Q.onLine2){var J;V===G?W>q?(J=["L",Q.x+2*B,V],T.splice(F+1,0,J),J=["C",Q.x+2*B,V,Q.x,V-4*B,Q.x-2*B,V],T.splice(F+2,0,J),r.attr("path",T)):(J=["L",Q.x-2*B,V],T.splice(F+1,0,J),J=["C",Q.x-2*B,V,Q.x,V-4*B,Q.x+2*B,V],T.splice(F+2,0,J),r.attr("path",T)):V>G?(J=["L",W,Q.y+2*B],T.splice(F+1,0,J),J=["C",W,Q.y+2*B,W+4*B,Q.y,W,Q.y-2*B],T.splice(F+2,0,J),r.attr("path",T)):(J=["L",W,Q.y-2*B],T.splice(F+1,0,J),J=["C",W,Q.y-2*B,W+4*B,Q.y,W,Q.y+2*B],T.splice(F+2,0,J),r.attr("path",T)),F+=2,M+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,n="M{0},{1}";for(r=2,s=2*e.length+2;s>r;r+=2)n+=" L{"+r+"},{"+(r+1)+"}";var o=[i.x,i.y];for(r=0,s=e.length;s>r;r++)o.push(e[r].x),o.push(e[r].y);var h=t.paper.path(n,o);h.attr("stroke",t.options["element-color"]),h.attr("stroke-width",t.options["line-width"]);var a=t.options.font,x=t.options["font-family"],l=t.options["font-weight"];return a&&h.attr({font:a}),x&&h.attr({"font-family":x}),l&&h.attr({"font-weight":l}),h}function r(t,i,e,r){var s,n;"[object Array]"!==Object.prototype.toString.call(e)&&(e=[e]);var o="M{0},{1}";for(s=2,n=2*e.length+2;n>s;s+=2)o+=" L{"+s+"},{"+(s+1)+"}";var h=[i.x,i.y];for(s=0,n=e.length;n>s;s++)h.push(e[s].x),h.push(e[s].y);var a=t.paper.path(o,h);a.attr({stroke:t.options["line-color"],"stroke-width":t.options["line-width"],"arrow-end":t.options["arrow-end"]});var x=t.options.font,l=t.options["font-family"],y=t.options["font-weight"];if(x&&a.attr({font:x}),l&&a.attr({"font-family":l}),y&&a.attr({"font-weight":y}),r){var g=!1,f=t.paper.text(0,0,r),p=!1,c=e[0];i.y===c.y&&(p=!0);var u=0,d=0;g?(u=i.x>c.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"])),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),l&&f.attr({"font-family":l}),y&&f.attr({"font-weight":y})}return a}function s(t,i,e,r,s,n,o,h){var a,x,l,y,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-n)*(e-t)-(o-s)*(r-i),0===a?f:(x=i-n,l=t-s,y=(o-s)*x-(h-n)*l,g=(e-t)*x-(r-i)*l,x=y/a,l=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&1>x&&(f.onLine1=!0),l>0&&1>l&&(f.onLine2=!0),f)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?y.symbols[t.substring(0,i-1)]:y.symbols[t]}function r(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=C.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var y={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new n(y,t);break;case"end":g[t.key]=new o(y,t);break;case"operation":g[t.key]=new h(y,t);break;case"inputoutput":g[t.key]=new a(y,t);break;case"subroutine":g[t.key]=new x(y,t);break;case"condition":g[t.key]=new l(y,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var y=new s(t,i);this.diagram=y;var g={};!function f(t,i,s){var n=e(t);return r.start===t?y.startWith(n):i&&s&&!i.pathOk&&(i instanceof l?(s.yes===t&&i.yes(n),s.no===t&&i.no(n)):i.then(n)),n.pathOk?n:(n instanceof l?(t.yes&&f(t.yes,n,t),t.no&&f(t.no,n,t)):t.next&&f(t.next,n,t),n)}(this.start),y.render()},clean:function(){this.diagram.clean()}},g=[],f=0,p=1,c=t.length;c>p;p++)if("\n"===t[p]&&"\\"!==t[p-1]){var u=t.substring(f,p);f=p+1,g.push(u.replace(/\\\n/g,"\n"))}fd;){var b=g[d];b.indexOf("->")<0&&b.indexOf("=>")<0&&b.indexOf("@>")<0?(g[d-1]+="\n"+b,g.splice(d,1),m--):d++}for(;g.length>0;){var v=g.splice(0,1)[0].trim();if(v.indexOf("=>")>=0){var w=v.split("=>"),k={key:w[0].replace(/\(.*\)/,""),symbolType:w[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},_=w[0].match(/\((.*)\)/);if(_&&_.length>1)for(var B=_[1].split(","),A=0;A=0&&(L=k.symbolType.split(": "),k.symbolType=L.shift(),k.text=L.join(": ")),k.text&&k.text.indexOf(":>")>=0?(L=k.text.split(":>"),k.text=L.shift(),k.link=L.join(":>")):k.symbolType.indexOf(":>")>=0&&(L=k.symbolType.split(":>"),k.symbolType=L.shift(),k.link=L.join(":>")),k.symbolType.indexOf("\n")>=0&&(k.symbolType=k.symbolType.split("\n")[0]),k.link){var M=k.link.indexOf("[")+1,X=k.link.indexOf("]");M>=0&&X>=0&&(k.target=k.link.substring(M,X),k.link=k.link.substring(0,M-1))}if(k.text&&k.text.indexOf("|")>=0){var S=k.text.split("|");k.flowstate=S.pop().trim(),k.text=S.join("|")}y.symbols[k.key]=k}else if(v.indexOf("->")>=0)for(var T=v.split("->"),A=0,Y=T.length;Y>A;A++){var C=T[A],j=e(C),E=r(C),z=null;if(E.indexOf(",")>=0){var P=E.split(",");E=P[0],z=P[1].trim()}if(y.start||(y.start=j),Y>A+1){var R=T[A+1];j[E]=e(R),j["direction_"+E]=z,z=null}}else if(v.indexOf("@>")>=0)for(var F=v.split("@>"),A=0,Y=F.length;Y>A;A++)if(A+1!=Y){var I=e(F[A]),R=e(F[A+1]);I.lineStyle[R.key]=JSON.parse(i(F[A+1]))}}return y}var s=e(6),n=e(12),o=e(9),h=e(11),a=e(10),x=e(13),l=e(5);t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.yes_direction="bottom",this.no_direction="right",this.params=i.params,i.yes&&i.direction_yes&&i.no&&!i.direction_no?"right"===i.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):(this.no_direction="right",this.yes_direction="bottom"):i.yes&&!i.direction_yes&&i.no&&i.direction_no?"right"===i.direction_no?(this.yes_direction="bottom",this.no_direction="right"):(this.yes_direction="right",this.no_direction="bottom"):(this.yes_direction="bottom",this.no_direction="right"),this.yes_direction=this.yes_direction||"bottom",this.no_direction=this.no_direction||"right",this.text.attr({x:2*this.textMargin});var e=this.text.getBBox().width+3*this.textMargin;e+=e/2;var r=this.text.getBBox().height+2*this.textMargin;r+=r/2,r=Math.max(.5*e,r);var n=e/4,o=r/4;this.text.attr({x:n+this.textMargin/2});var a={x:n,y:o},x=[{x:n-e/4,y:o+r/4},{x:n-e/4+e/2,y:o+r/4+r/2},{x:n-e/4+e,y:o+r/4},{x:n-e/4+e/2,y:o+r/4-r/2},{x:n-e/4,y:o+r/4}],l=h(t,a,x);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits,o=e(3),h=o.drawPath;n(r,s),r.prototype.render=function(){this.yes_direction&&(this[this.yes_direction+"_symbol"]=this.yes_symbol),this.no_direction&&(this[this.no_direction+"_symbol"]=this.no_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.right_symbol){var e=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(e.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var r=this;!function s(){for(var i,e=!1,n=0,o=r.chart.symbols.length;o>n;n++)if(i=r.chart.symbols[n],!r.params["align-next"]||"no"!==r.params["align-next"]){var h=Math.abs(i.getCenter().x-r.right_symbol.getCenter().x);if(i.getCenter().y>r.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),s())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=n(i,o),this.symbols=[],this.lines=[],this.start=null}var s=e(15),n=e(1).defaults,o=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,n=0,o=0,h=0,a=0,x=0;for(s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],t.width>e&&(e=t.width),t.height>r&&(r=t.height);for(s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],t.shiftX(this.options.x+(e-t.width)/2+this.options["line-width"]),t.shiftY(this.options.y+(r-t.height)/2+this.options["line-width"]);for(this.start.render(),s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],t.renderLines();o=this.maxXFromLine;var l,y;for(s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],l=t.getX()+t.width,y=t.getY()+t.height,l>o&&(o=l),y>h&&(h=y);for(s=0,n=this.lines.length;n>s;s++){i=this.lines[s].getBBox(),l=i.x,y=i.y;var g=i.x2,f=i.y2;a>l&&(a=l),x>y&&(x=y),g>o&&(o=g),f>h&&(h=f)}var p=this.options.scale,c=this.options["line-width"];0>a&&(a-=c),0>x&&(x-=c);var u=o+c-a,d=h+c-x;this.paper.setSize(u*p,d*p),this.paper.setViewBox(a,x,u,d,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);e>s;s++)if(s in i&&i[s]===t)return s;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,n=this.textMargin,o=r/2,a={x:n,y:o},x=[{x:n-this.textMargin,y:r},{x:n-this.textMargin+e,y:r},{x:n-this.textMargin+e+2*this.textMargin,y:0},{x:n-this.textMargin+2*this.textMargin,y:0},{x:n,y:o}],l=h(t,a,x);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits,o=e(3),h=o.drawPath;n(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var n=this.getAttr("font"),o=this.getAttr("font-family"),h=this.getAttr("font-weight");n&&r.attr({font:n}),o&&r.attr({"font-family":o}),h&&r.attr({"font-weight":h}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); //# sourceMappingURL=flowchart.min.js.map \ No newline at end of file diff --git a/release/flowchart.min.js.map b/release/flowchart.min.js.map index 2112af98..3d8fbf04 100644 --- a/release/flowchart.min.js.map +++ b/release/flowchart.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap fa31ed635fd738c1296d","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","next_direction","next","undefined","text","key","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].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],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\n\t };\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap fa31ed635fd738c1296d\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\n };\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 5318a20b8e2a20917239","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","params","match","entries","entry","sub","join","txtAndState","pop","flowSymbols","lenS","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t //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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && 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 getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\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\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/***/ },\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 {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 5318a20b8e2a20917239\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n //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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && 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 getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\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\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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n 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 {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/releasenotes.md b/releasenotes.md index 7e97e477..f303c3d7 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,6 +1,11 @@ +### v1.7.0 + +- add parameter to disable vertical alignment of condition symbol [#115](https://github.com/adrai/flowchart.js/pull/#115) thanks to [bertrandmartel](https://github.com/bertrandmartel) +- add line style flow support [#113](https://github.com/adrai/flowchart.js/pull/#115) thanks to [bertrandmartel](https://github.com/bertrandmartel) + ### v1.6.6 -- Fix disruptive space char when parsing [##105](https://github.com/adrai/flowchart.js/pull/#105) +- Fix disruptive space char when parsing [#105](https://github.com/adrai/flowchart.js/pull/#105) ### v1.6.5 @@ -12,15 +17,15 @@ ### v1.6.3 -- Allow going to same symbol thanks to [nonylene](https://github.com/nonylene) [##83](https://github.com/adrai/flowchart.js/pull/#83) +- Allow going to same symbol thanks to [nonylene](https://github.com/nonylene) [#83](https://github.com/adrai/flowchart.js/pull/#83) ### v1.6.2 -- Fixed not calculate viewBox and size properly thanks to [jackycute](https://github.com/jackycute) [##74](https://github.com/adrai/flowchart.js/issues/#74) +- Fixed not calculate viewBox and size properly thanks to [jackycute](https://github.com/jackycute) [#74](https://github.com/adrai/flowchart.js/issues/#74) ### v1.6.1 -- Fixed lines are not included in the calculation of viewBox and size thanks to [jackycute](https://github.com/jackycute) [##72](https://github.com/adrai/flowchart.js/issues/#72) [##67](https://github.com/adrai/flowchart.js/issues/#67) +- Fixed lines are not included in the calculation of viewBox and size thanks to [jackycute](https://github.com/jackycute) [#72](https://github.com/adrai/flowchart.js/issues/#72) [#67](https://github.com/adrai/flowchart.js/issues/#67) ### v1.6.0 diff --git a/site b/site index 02d75774..d1423850 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 02d7577472e5e170ca453653fa22175a5e444d18 +Subproject commit d14238505aa292bb94128d7f0199d989e4212b34 From ae777901e12467f6e84461866c03f7a81b6206ed Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Sun, 27 Aug 2017 21:30:20 +0200 Subject: [PATCH 035/117] update site --- site | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site b/site index d1423850..1abcb028 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit d14238505aa292bb94128d7f0199d989e4212b34 +Subproject commit 1abcb0288e75df55e7cca90b87b8cee1906cf029 From 3de1283d88c559e95f81e70b63bcf5fc6aa316d8 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Wed, 1 Nov 2017 20:43:20 +0100 Subject: [PATCH 036/117] minimi --- .gitignore | 1 + package.json | 1 + 2 files changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 29b32d94..6730a94f 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ node_modules/**/* bin reports reports/**/* +package-lock.json diff --git a/package.json b/package.json index 91c49fd1..dccb6785 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "webpack-hot-middleware": "^2.6.0" }, "scripts": { + "init": "git submodule init && git submodule update && git submodule status", "start": "node devserver.js", "lint": "eslint src", "build:unminified": "NODE_ENV=production webpack -d --config webpack.config.js", From e1639cf30be2173050d1d4c2791b2ae47e2cda77 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Sat, 18 Nov 2017 11:49:19 +0100 Subject: [PATCH 037/117] update site --- site | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site b/site index 1abcb028..4f9605e2 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 1abcb0288e75df55e7cca90b87b8cee1906cf029 +Subproject commit 4f9605e2af5cd0ea6dc352b26cd315be22d8d3a3 From 3fb80cc7479c52b247613823644aba084925d809 Mon Sep 17 00:00:00 2001 From: Brandon Hedge Date: Wed, 27 Dec 2017 11:57:27 -0600 Subject: [PATCH 038/117] Allow Conditional to support 'true' or 'false' along with 'yes' and 'no' (#128) * updates parse to allow for true or false in condition * updates index.html example to include true false for good idea condition example * updates the build files * update README.md to include true false conditional example. --- README.md | 11 +++++-- index.html | 4 +-- release/flowchart.js | 64 ++++++++++++++++++++---------------- release/flowchart.js.map | 2 +- release/flowchart.min.js | 2 +- release/flowchart.min.js.map | 2 +- src/flowchart.parse.js | 22 +++++++++++-- 7 files changed, 68 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 86d1a2b6..dd0b74af 100644 --- a/README.md +++ b/README.md @@ -35,14 +35,19 @@ and then var diagram = flowchart.parse('st=>start: Start:>http://www.google.com[blank]\n' + 'e=>end:>http://www.google.com\n' + 'op1=>operation: My Operation\n' + + 'op2=>operation: Stuff|current\n' + 'sub1=>subroutine: My Subroutine\n' + 'cond=>condition: Yes \n' + // use cond(align-next=no) to disable vertical align of symbols below 'or No?\n:>http://www.google.com' + + 'c2=>condition: Good idea|rejected\n' + 'io=>inputoutput|request: catch something...\n' + '' + - 'st->op1->cond\n' + - 'cond(yes)->io->e\n' + // conditions can also be redirected like cond(yes, bottom) or cond(yes, right) - 'cond(no)->sub1(right)->op1');// the other symbols too... + 'st->op1(right)->cond\n' + + 'cond(yes, right)->c2\n' + // conditions can also be redirected like cond(yes, bottom) or cond(yes, right) + 'cond(no)->sub1(left)->op1\n' + + 'c2(true)->io->e\n' + + 'c2(false)->op2->e' //allow for true and false in conditionals + );// the other symbols too... diagram.drawSVG('diagram'); // you can also try to pass options: diff --git a/index.html b/index.html index 84f58dc9..7f1854cf 100644 --- a/index.html +++ b/index.html @@ -21,8 +21,8 @@ st->op1(right)->cond cond(yes, right)->c2 cond(no)->sub1(left)->op1 -c2(yes)->io->e -c2(no)->op2->e +c2(true)->io->e +c2(false)->op2->e diff --git a/release/flowchart.js b/release/flowchart.js index 79d507e1..fa81e409 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -149,7 +149,7 @@ }), options.link && this.text.attr("href", options.link), options.target && this.text.attr("target", options.target); var maxWidth = this.getAttr("maxWidth"); if (maxWidth) { - for (var words = options.text.split(" "), tempText = "", i = 0, ii = words.length; ii > i; i++) { + for (var words = options.text.split(" "), tempText = "", i = 0, ii = words.length; i < ii; i++) { var word = words[i]; this.text.attr("text", tempText + " " + word), tempText += this.text.getBBox().width > maxWidth ? "\n" + word : " " + word; } @@ -231,7 +231,7 @@ this.next.setY(rightPoint.y - this.next.height / 2), this.next.shiftX(this.group.getBBox().x + this.width + lineLength); var self = this; !function shift() { - for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; len > i; i++) { + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) { symb = self.chart.symbols[i]; var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x); if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width / 2) { @@ -253,7 +253,7 @@ this.next && (this.next_direction ? this.drawLineTo(this.next, "", this.next_direction) : this.drawLineTo(this.next)); }, Symbol.prototype.drawLineTo = function(symbol, text, origin) { this.connectedTo.indexOf(symbol) < 0 && this.connectedTo.push(symbol); - var line, x = this.getCenter().x, y = this.getCenter().y, right = this.getRight(), bottom = this.getBottom(), left = this.getLeft(), symbolX = symbol.getCenter().x, symbolY = symbol.getCenter().y, symbolTop = symbol.getTop(), symbolRight = symbol.getRight(), symbolLeft = symbol.getLeft(), isOnSameColumn = x === symbolX, isOnSameLine = y === symbolY, isUnder = symbolY > y, isUpper = y > symbolY || this === symbol, isLeft = x > symbolX, isRight = symbolX > x, maxX = 0, lineLength = this.getAttr("line-length"), lineWith = this.getAttr("line-width"); + var line, x = this.getCenter().x, y = this.getCenter().y, right = this.getRight(), bottom = this.getBottom(), left = this.getLeft(), symbolX = symbol.getCenter().x, symbolY = symbol.getCenter().y, symbolTop = symbol.getTop(), symbolRight = symbol.getRight(), symbolLeft = symbol.getLeft(), isOnSameColumn = x === symbolX, isOnSameLine = y === symbolY, isUnder = y < symbolY, isUpper = y > symbolY || this === symbol, isLeft = x > symbolX, isRight = x < symbolX, maxX = 0, lineLength = this.getAttr("line-length"), lineWith = this.getAttr("line-width"); if (origin && "bottom" !== origin || !isOnSameColumn || !isUnder) if (origin && "right" !== origin || !isOnSameLine || !isRight) if (origin && "left" !== origin || !isOnSameLine || !isLeft) if (origin && "right" !== origin || !isOnSameColumn || !isUpper) if (origin && "right" !== origin || !isOnSameColumn || !isUnder) if (origin && "bottom" !== origin || !isLeft) if (origin && "bottom" !== origin || !isRight) if (origin && "right" === origin && isLeft) line = drawLine(this.chart, right, [ { x: right.x + lineLength / 2, y: right.y @@ -383,10 +383,10 @@ this.bottomStart = !0, symbol.topEnd = !0, maxX = bottom.x; if (//update line style this.lineStyle[symbol.key] && line && line.attr(this.lineStyle[symbol.key]), line) { - for (var l = 0, llen = this.chart.lines.length; llen > l; l++) for (var len, otherLine = this.chart.lines[l], ePath = otherLine.attr("path"), lPath = line.attr("path"), iP = 0, lenP = ePath.length - 1; lenP > iP; iP++) { + for (var l = 0, llen = this.chart.lines.length; l < llen; l++) for (var len, otherLine = this.chart.lines[l], ePath = otherLine.attr("path"), lPath = line.attr("path"), iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) { var newPath = []; newPath.push([ "M", ePath[iP][1], ePath[iP][2] ]), newPath.push([ "L", ePath[iP + 1][1], ePath[iP + 1][2] ]); - for (var line1_from_x = newPath[0][1], line1_from_y = newPath[0][2], line1_to_x = newPath[1][1], line1_to_y = newPath[1][2], lP = 0, lenlP = lPath.length - 1; lenlP > lP; lP++) { + for (var line1_from_x = newPath[0][1], line1_from_y = newPath[0][2], line1_to_x = newPath[1][1], line1_to_y = newPath[1][2], lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) { var newLinePath = []; newLinePath.push([ "M", lPath[lP][1], lPath[lP][2] ]), newLinePath.push([ "L", lPath[lP + 1][1], lPath[lP + 1][2] ]); var line2_from_x = newLinePath[0][1], line2_from_y = newLinePath[0][2], line2_to_x = newLinePath[1][1], line2_to_y = newLinePath[1][2], 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); @@ -416,9 +416,9 @@ function(module, exports) { function drawPath(chart, location, points) { var i, len, path = "M{0},{1}"; - for (i = 2, len = 2 * points.length + 2; len > i; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; + for (i = 2, len = 2 * points.length + 2; i < len; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; var pathValues = [ location.x, location.y ]; - for (i = 0, len = points.length; len > i; i++) pathValues.push(points[i].x), pathValues.push(points[i].y); + for (i = 0, len = points.length; i < len; i++) pathValues.push(points[i].x), pathValues.push(points[i].y); var symbol = chart.paper.path(path, pathValues); symbol.attr("stroke", chart.options["element-color"]), symbol.attr("stroke-width", chart.options["line-width"]); var font = chart.options.font, fontF = chart.options["font-family"], fontW = chart.options["font-weight"]; @@ -434,9 +434,9 @@ var i, len; "[object Array]" !== Object.prototype.toString.call(to) && (to = [ to ]); var path = "M{0},{1}"; - for (i = 2, len = 2 * to.length + 2; len > i; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; + for (i = 2, len = 2 * to.length + 2; i < len; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; var pathValues = [ from.x, from.y ]; - for (i = 0, len = to.length; len > i; i++) pathValues.push(to[i].x), pathValues.push(to[i].y); + for (i = 0, len = to.length; i < len; i++) pathValues.push(to[i].x), pathValues.push(to[i].y); var line = chart.paper.path(path, pathValues); line.attr({ stroke: chart.options["line-color"], @@ -495,8 +495,8 @@ 0 === denominator ? result : (a = line1StartY - line2StartY, b = line1StartX - line2StartX, numerator1 = (line2EndX - line2StartX) * a - (line2EndY - line2StartY) * b, numerator2 = (line1EndX - line1StartX) * a - (line1EndY - line1StartY) * b, a = numerator1 / denominator, b = numerator2 / denominator, result.x = line1StartX + a * (line1EndX - line1StartX), - result.y = line1StartY + a * (line1EndY - line1StartY), a > 0 && 1 > a && (result.onLine1 = !0), - b > 0 && 1 > b && (result.onLine2 = !0), result); + result.y = line1StartY + a * (line1EndY - line1StartY), a > 0 && a < 1 && (result.onLine1 = !0), + b > 0 && b < 1 && (result.onLine2 = !0), result); } module.exports = { drawPath: drawPath, @@ -514,6 +514,10 @@ var startIndex = s.indexOf("(") + 1, endIndex = s.indexOf(")"); return startIndex >= 0 && endIndex >= 0 ? s.substring(startIndex, endIndex) : "{}"; } + function getSymbValue(s) { + var startIndex = s.indexOf("(") + 1, endIndex = s.indexOf(")"); + return startIndex >= 0 && endIndex >= 0 ? s.substring(startIndex, endIndex) : ""; + } function getSymbol(s) { var startIndex = s.indexOf("(") + 1, endIndex = s.indexOf(")"); return startIndex >= 0 && endIndex >= 0 ? chart.symbols[s.substring(0, startIndex - 1)] : chart.symbols[s]; @@ -577,12 +581,12 @@ clean: function() { this.diagram.clean(); } - }, lines = [], prevBreak = 0, i0 = 1, i0len = input.length; i0len > i0; i0++) if ("\n" === input[i0] && "\\" !== input[i0 - 1]) { + }, lines = [], prevBreak = 0, i0 = 1, i0len = input.length; i0 < i0len; i0++) if ("\n" === input[i0] && "\\" !== input[i0 - 1]) { var line0 = input.substring(prevBreak, i0); prevBreak = i0 + 1, lines.push(line0.replace(/\\\n/g, "\n")); } prevBreak < input.length && lines.push(input.substr(prevBreak)); - for (var l = 1, len = lines.length; len > l; ) { + for (var l = 1, len = lines.length; l < len; ) { var currentLine = lines[l]; currentLine.indexOf("->") < 0 && currentLine.indexOf("=>") < 0 && currentLine.indexOf("@>") < 0 ? (lines[l - 1] += "\n" + currentLine, lines.splice(l, 1), len--) : l++; @@ -624,18 +628,21 @@ } /* end of flowstate support */ chart.symbols[symbol.key] = symbol; - } else if (line.indexOf("->") >= 0) for (var flowSymbols = line.split("->"), i = 0, lenS = flowSymbols.length; lenS > i; i++) { - var flowSymb = flowSymbols[i], realSymb = getSymbol(flowSymb), next = getNextPath(flowSymb), direction = null; + } else if (line.indexOf("->") >= 0) for (var flowSymbols = line.split("->"), i = 0, lenS = flowSymbols.length; i < lenS; i++) { + var flowSymb = flowSymbols[i], symbVal = getSymbValue(flowSymb); + "true" !== symbVal && "false" !== symbVal || (// map true or false to yes or no respectively + flowSymb = flowSymb.replace("true", "yes"), flowSymb = flowSymb.replace("false", "no")); + var realSymb = getSymbol(flowSymb), next = getNextPath(flowSymb), direction = null; if (next.indexOf(",") >= 0) { var condOpt = next.split(","); next = condOpt[0], direction = condOpt[1].trim(); } - if (chart.start || (chart.start = realSymb), lenS > i + 1) { + if (chart.start || (chart.start = realSymb), i + 1 < lenS) { var nextSymb = flowSymbols[i + 1]; realSymb[next] = getSymbol(nextSymb), realSymb["direction_" + next] = direction, direction = null; } - } else if (line.indexOf("@>") >= 0) for (var lineStyleSymbols = line.split("@>"), i = 0, lenS = lineStyleSymbols.length; lenS > i; i++) if (i + 1 != lenS) { + } else if (line.indexOf("@>") >= 0) for (var lineStyleSymbols = line.split("@>"), i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) if (i + 1 != lenS) { var curSymb = getSymbol(lineStyleSymbols[i]), nextSymb = getSymbol(lineStyleSymbols[i + 1]); curSymb.lineStyle[nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1])); } @@ -714,7 +721,7 @@ this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2), this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength); var self = this; !function shift() { - for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; len > i; i++) if (symb = self.chart.symbols[i], + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) if (symb = self.chart.symbols[i], !self.params["align-next"] || "no" !== self.params["align-next"]) { var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) { @@ -758,27 +765,27 @@ return this.start = symbol, this.handle(symbol); }, FlowChart.prototype.render = function() { var symbol, line, maxWidth = 0, maxHeight = 0, i = 0, len = 0, maxX = 0, maxY = 0, minX = 0, minY = 0; - for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.width > maxWidth && (maxWidth = symbol.width), + for (i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], symbol.width > maxWidth && (maxWidth = symbol.width), symbol.height > maxHeight && (maxHeight = symbol.height); - for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.shiftX(this.options.x + (maxWidth - symbol.width) / 2 + this.options["line-width"]), + for (i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], symbol.shiftX(this.options.x + (maxWidth - symbol.width) / 2 + this.options["line-width"]), symbol.shiftY(this.options.y + (maxHeight - symbol.height) / 2 + this.options["line-width"]); // for (i = 0, len = this.symbols.length; i < len; i++) { // symbol = this.symbols[i]; // symbol.render(); // } - for (this.start.render(), i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], + for (this.start.render(), i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], symbol.renderLines(); maxX = this.maxXFromLine; var x, y; - for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], x = symbol.getX() + symbol.width, + for (i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], x = symbol.getX() + symbol.width, y = symbol.getY() + symbol.height, x > maxX && (maxX = x), y > maxY && (maxY = y); - for (i = 0, len = this.lines.length; len > i; i++) { + for (i = 0, len = this.lines.length; i < len; i++) { line = this.lines[i].getBBox(), x = line.x, y = line.y; var x2 = line.x2, y2 = line.y2; - minX > x && (minX = x), minY > y && (minY = y), x2 > maxX && (maxX = x2), y2 > maxY && (maxY = y2); + x < minX && (minX = x), y < minY && (minY = y), x2 > maxX && (maxX = x2), y2 > maxY && (maxY = y2); } var scale = this.options.scale, lineWidth = this.options["line-width"]; - 0 > minX && (minX -= lineWidth), 0 > minY && (minY -= lineWidth); + minX < 0 && (minX -= lineWidth), minY < 0 && (minY -= lineWidth); var width = maxX + lineWidth - minX, height = maxY + lineWidth - minY; this.paper.setSize(width * scale, height * scale), this.paper.setViewBox(minX, minY, width, height, !0); }, FlowChart.prototype.clean = function() { @@ -811,7 +818,7 @@ "yes-text": "yes", "no-text": "no", "arrow-end": "block", - "class": "flowchart", + class: "flowchart", scale: 1, symbols: { start: {}, @@ -835,9 +842,10 @@ var t = Object(this), len = t.length >>> 0; if (0 === len) return -1; var n = 0; - if (arguments.length > 0 && (n = Number(arguments[1]), n != n ? n = 0 : 0 !== n && n != 1 / 0 && n != -(1 / 0) && (n = (n > 0 || -1) * Math.floor(Math.abs(n)))), + if (arguments.length > 0 && (n = Number(arguments[1]), n != n ? // shortcut for verifying if it's NaN + n = 0 : 0 !== n && n != 1 / 0 && n != -(1 / 0) && (n = (n > 0 || -1) * Math.floor(Math.abs(n)))), n >= len) return -1; - for (var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); len > k; k++) if (k in t && t[k] === searchElement) return k; + for (var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); k < len; k++) if (k in t && t[k] === searchElement) return k; return -1; }), // add lastIndexOf to non ECMA-262 standard compliant browsers Array.prototype.lastIndexOf || (Array.prototype.lastIndexOf = function(searchElement) { diff --git a/release/flowchart.js.map b/release/flowchart.js.map index 717d04ac..60594d4e 100644 --- a/release/flowchart.js.map +++ b/release/flowchart.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap d55f3eebb0d5595906d9","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","params","match","entries","entry","sub","join","txtAndState","pop","flowSymbols","lenS","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t //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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && 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 getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\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\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/***/ },\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 {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap d55f3eebb0d5595906d9\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n //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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && 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 getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\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\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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n 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 {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap b25fc93d093648e4134a","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\r\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\r\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\r\n\t\r\n\tvar FlowChart = {\r\n\t\tparse: parse\r\n\t};\r\n\t\r\n\tif (typeof window !== 'undefined') {\r\n\t\twindow.flowchart = FlowChart;\r\n\t}\r\n\t\r\n\tmodule.exports = FlowChart;\r\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\r\n\t if (!options || typeof options === 'function') {\r\n\t return defaultOptions;\r\n\t }\r\n\t\r\n\t var merged = {};\r\n\t for (var attrname in defaultOptions) {\r\n\t merged[attrname] = defaultOptions[attrname];\r\n\t }\r\n\t\r\n\t for (attrname in options) {\r\n\t if (options[attrname]) {\r\n\t if (typeof merged[attrname] === 'object') {\r\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\r\n\t } else {\r\n\t merged[attrname] = options[attrname];\r\n\t }\r\n\t }\r\n\t }\r\n\t return merged;\r\n\t}\r\n\t\r\n\tfunction _inherits(ctor, superCtor) {\r\n\t if (typeof(Object.create) === 'function') {\r\n\t // implementation from standard node.js 'util' module\r\n\t ctor.super_ = superCtor;\r\n\t ctor.prototype = Object.create(superCtor.prototype, {\r\n\t constructor: {\r\n\t value: ctor,\r\n\t enumerable: false,\r\n\t writable: true,\r\n\t configurable: true\r\n\t }\r\n\t });\r\n\t } else {\r\n\t // old school shim for old browsers\r\n\t ctor.super_ = superCtor;\r\n\t var TempCtor = function () {};\r\n\t TempCtor.prototype = superCtor.prototype;\r\n\t ctor.prototype = new TempCtor();\r\n\t ctor.prototype.constructor = ctor;\r\n\t }\r\n\t}\r\n\t\r\n\t// move dependent functions to a container so that\r\n\t// they can be overriden easier in no jquery environment (node.js)\r\n\tmodule.exports = {\r\n\t defaults: _defaults,\r\n\t inherits: _inherits\r\n\t};\r\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);\r\n\tvar drawLine = drawAPI.drawLine;\r\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\r\n\t\r\n\tfunction Symbol(chart, options, symbol) {\r\n\t this.chart = chart;\r\n\t this.group = this.chart.paper.set();\r\n\t this.symbol = symbol;\r\n\t this.connectedTo = [];\r\n\t this.symbolType = options.symbolType;\r\n\t this.flowstate = (options.flowstate || 'future');\r\n\t this.lineStyle = (options.lineStyle || {});\r\n\t this.key = (options.key || '');\r\n\t\r\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\r\n\t\r\n\t this.text = this.chart.paper.text(0, 0, options.text);\r\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\r\n\t if (options.key) { this.text.node.id = options.key + 't'; }\r\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\r\n\t\r\n\t this.text.attr({\r\n\t 'text-anchor': 'start',\r\n\t 'x' : this.getAttr('text-margin'),\r\n\t 'fill' : this.getAttr('font-color'),\r\n\t 'font-size' : this.getAttr('font-size')\r\n\t });\r\n\t\r\n\t var font = this.getAttr('font');\r\n\t var fontF = this.getAttr('font-family');\r\n\t var fontW = this.getAttr('font-weight');\r\n\t\r\n\t if (font) this.text.attr({ 'font': font });\r\n\t if (fontF) this.text.attr({ 'font-family': fontF });\r\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\r\n\t\r\n\t if (options.link) { this.text.attr('href', options.link); }\r\n\t if (options.target) { this.text.attr('target', options.target); }\r\n\t\r\n\t var maxWidth = this.getAttr('maxWidth');\r\n\t if (maxWidth) {\r\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\r\n\t var words = options.text.split(' ');\r\n\t var tempText = \"\";\r\n\t for (var i=0, ii=words.length; i maxWidth) {\r\n\t tempText += \"\\n\" + word;\r\n\t } else {\r\n\t tempText += \" \" + word;\r\n\t }\r\n\t }\r\n\t this.text.attr(\"text\", tempText.substring(1));\r\n\t }\r\n\t\r\n\t this.group.push(this.text);\r\n\t\r\n\t if (symbol) {\r\n\t var tmpMargin = this.getAttr('text-margin');\r\n\t\r\n\t symbol.attr({\r\n\t 'fill' : this.getAttr('fill'),\r\n\t 'stroke' : this.getAttr('element-color'),\r\n\t 'stroke-width' : this.getAttr('line-width'),\r\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\r\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\r\n\t });\r\n\t\r\n\t symbol.node.setAttribute('class', this.getAttr('class'));\r\n\t\r\n\t if (options.link) { symbol.attr('href', options.link); }\r\n\t if (options.target) { symbol.attr('target', options.target); }\r\n\t if (options.key) { symbol.node.id = options.key; }\r\n\t\r\n\t this.group.push(symbol);\r\n\t symbol.insertBefore(this.text);\r\n\t\r\n\t this.text.attr({\r\n\t 'y': symbol.getBBox().height/2\r\n\t });\r\n\t\r\n\t this.initialize();\r\n\t }\r\n\t\r\n\t}\r\n\t\r\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\r\n\tSymbol.prototype.getAttr = function(attName) {\r\n\t if (!this.chart) {\r\n\t return undefined;\r\n\t }\r\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\r\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\r\n\t var opt1;\r\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\r\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\r\n\t }\r\n\t return (opt1 || opt2 || opt3);\r\n\t};\r\n\t\r\n\tSymbol.prototype.initialize = function() {\r\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\r\n\t\r\n\t this.width = this.group.getBBox().width;\r\n\t this.height = this.group.getBBox().height;\r\n\t};\r\n\t\r\n\tSymbol.prototype.getCenter = function() {\r\n\t return {x: this.getX() + this.width/2,\r\n\t y: this.getY() + this.height/2};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getX = function() {\r\n\t return this.group.getBBox().x;\r\n\t};\r\n\t\r\n\tSymbol.prototype.getY = function() {\r\n\t return this.group.getBBox().y;\r\n\t};\r\n\t\r\n\tSymbol.prototype.shiftX = function(x) {\r\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\r\n\t};\r\n\t\r\n\tSymbol.prototype.setX = function(x) {\r\n\t this.group.transform('t' + x + ',' + this.getY());\r\n\t};\r\n\t\r\n\tSymbol.prototype.shiftY = function(y) {\r\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\r\n\t};\r\n\t\r\n\tSymbol.prototype.setY = function(y) {\r\n\t this.group.transform('t' + this.getX() + ',' + y);\r\n\t};\r\n\t\r\n\tSymbol.prototype.getTop = function() {\r\n\t var y = this.getY();\r\n\t var x = this.getX() + this.width/2;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getBottom = function() {\r\n\t var y = this.getY() + this.height;\r\n\t var x = this.getX() + this.width/2;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getLeft = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX();\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getRight = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX() + this.group.getBBox().width;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.render = function() {\r\n\t if (this.next) {\r\n\t\r\n\t var lineLength = this.getAttr('line-length');\r\n\t\r\n\t if (this.next_direction === 'right') {\r\n\t\r\n\t var rightPoint = this.getRight();\r\n\t\r\n\t if (!this.next.isPositioned) {\r\n\t\r\n\t this.next.setY(rightPoint.y - this.next.height/2);\r\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\t\r\n\t var self = this;\r\n\t (function shift() {\r\n\t var hasSymbolUnder = false;\r\n\t var symb;\r\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n\t symb = self.chart.symbols[i];\r\n\t\r\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\r\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\r\n\t hasSymbolUnder = true;\r\n\t break;\r\n\t }\r\n\t }\r\n\t\r\n\t if (hasSymbolUnder) {\r\n\t self.next.setX(symb.getX() + symb.width + lineLength);\r\n\t shift();\r\n\t }\r\n\t })();\r\n\t\r\n\t this.next.isPositioned = true;\r\n\t\r\n\t this.next.render();\r\n\t }\r\n\t } else {\r\n\t var bottomPoint = this.getBottom();\r\n\t\r\n\t if (!this.next.isPositioned) {\r\n\t this.next.shiftY(this.getY() + this.height + lineLength);\r\n\t this.next.setX(bottomPoint.x - this.next.width/2);\r\n\t this.next.isPositioned = true;\r\n\t\r\n\t this.next.render();\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\t\r\n\tSymbol.prototype.renderLines = function() {\r\n\t if (this.next) {\r\n\t if (this.next_direction) {\r\n\t this.drawLineTo(this.next, '', this.next_direction);\r\n\t } else {\r\n\t this.drawLineTo(this.next);\r\n\t }\r\n\t }\r\n\t};\r\n\t\r\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\r\n\t if (this.connectedTo.indexOf(symbol) < 0) {\r\n\t this.connectedTo.push(symbol);\r\n\t }\r\n\t\r\n\t var x = this.getCenter().x,\r\n\t y = this.getCenter().y,\r\n\t right = this.getRight(),\r\n\t bottom = this.getBottom(),\r\n\t left = this.getLeft();\r\n\t\r\n\t var symbolX = symbol.getCenter().x,\r\n\t symbolY = symbol.getCenter().y,\r\n\t symbolTop = symbol.getTop(),\r\n\t symbolRight = symbol.getRight(),\r\n\t symbolLeft = symbol.getLeft();\r\n\t\r\n\t var isOnSameColumn = x === symbolX,\r\n\t isOnSameLine = y === symbolY,\r\n\t isUnder = y < symbolY,\r\n\t isUpper = y > symbolY || this === symbol,\r\n\t isLeft = x > symbolX,\r\n\t isRight = x < symbolX;\r\n\t\r\n\t var maxX = 0,\r\n\t line,\r\n\t lineLength = this.getAttr('line-length'),\r\n\t lineWith = this.getAttr('line-width');\r\n\t\r\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\r\n\t line = drawLine(this.chart, bottom, symbolTop, text);\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x;\r\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\r\n\t line = drawLine(this.chart, right, symbolLeft, text);\r\n\t this.rightStart = true;\r\n\t symbol.leftEnd = true;\r\n\t maxX = symbolLeft.x;\r\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\r\n\t line = drawLine(this.chart, left, symbolRight, text);\r\n\t this.leftStart = true;\r\n\t symbol.rightEnd = true;\r\n\t maxX = symbolRight.x;\r\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: right.x + lineLength/2, y: right.y},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: right.x + lineLength/2, y: right.y},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\r\n\t if (this.leftEnd && isUpper) {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t } else {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t }\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n\t } else if ((!origin || origin === 'bottom') && isRight) {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n\t } else if ((origin && origin === 'right') && isLeft) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: right.x + lineLength/2, y: right.y},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((origin && origin === 'right') && isRight) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: symbolTop.x, y: right.y},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: bottom.y + lineLength/2},\r\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x + lineLength/2;\r\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\r\n\t var diffX = left.x - lineLength/2;\r\n\t if (symbolLeft.x < left.x) {\r\n\t diffX = symbolLeft.x - lineLength/2;\r\n\t }\r\n\t line = drawLine(this.chart, left, [\r\n\t {x: diffX, y: left.y},\r\n\t {x: diffX, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.leftStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = left.x;\r\n\t } else if ((origin === 'left')) {\r\n\t line = drawLine(this.chart, left, [\r\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\r\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.leftStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = left.x;\r\n\t }\r\n\t\r\n\t //update line style\r\n\t if (this.lineStyle[symbol.key] && line){\r\n\t line.attr( this.lineStyle[symbol.key]);\r\n\t }\r\n\t\r\n\t if (line) {\r\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\r\n\t var otherLine = this.chart.lines[l];\r\n\t var len;\r\n\t\r\n\t var ePath = otherLine.attr('path'),\r\n\t lPath = line.attr('path');\r\n\t\r\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\r\n\t var newPath = [];\r\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\r\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\r\n\t\r\n\t var line1_from_x = newPath[0][1];\r\n\t var line1_from_y = newPath[0][2];\r\n\t var line1_to_x = newPath[1][1];\r\n\t var line1_to_y = newPath[1][2];\r\n\t\r\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\r\n\t var newLinePath = [];\r\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\r\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\r\n\t\r\n\t var line2_from_x = newLinePath[0][1];\r\n\t var line2_from_y = newLinePath[0][2];\r\n\t var line2_to_x = newLinePath[1][1];\r\n\t var line2_to_y = newLinePath[1][2];\r\n\t\r\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);\r\n\t if (res.onLine1 && res.onLine2) {\r\n\t\r\n\t var newSegment;\r\n\t if (line2_from_y === line2_to_y) {\r\n\t if (line2_from_x > line2_to_x) {\r\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t } else {\r\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t }\r\n\t } else {\r\n\t if (line2_from_y > line2_to_y) {\r\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t } else {\r\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t }\r\n\t }\r\n\t\r\n\t lP += 2;\r\n\t len += 2;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t this.chart.lines.push(line);\r\n\t }\r\n\t\r\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\r\n\t this.chart.maxXFromLine = maxX;\r\n\t }\r\n\t};\r\n\t\r\n\tmodule.exports = Symbol;\r\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\r\n\t var i, len;\r\n\t var path = 'M{0},{1}';\r\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\r\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\r\n\t }\r\n\t var pathValues = [location.x, location.y];\r\n\t for (i = 0, len = points.length; i < len; i++) {\r\n\t pathValues.push(points[i].x);\r\n\t pathValues.push(points[i].y);\r\n\t }\r\n\t var symbol = chart.paper.path(path, pathValues);\r\n\t symbol.attr('stroke', chart.options['element-color']);\r\n\t symbol.attr('stroke-width', chart.options['line-width']);\r\n\t\r\n\t var font = chart.options.font;\r\n\t var fontF = chart.options['font-family'];\r\n\t var fontW = chart.options['font-weight'];\r\n\t\r\n\t if (font) symbol.attr({ 'font': font });\r\n\t if (fontF) symbol.attr({ 'font-family': fontF });\r\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\r\n\t\r\n\t return symbol;\r\n\t}\r\n\t\r\n\tfunction drawLine(chart, from, to, text) {\r\n\t var i, len;\r\n\t\r\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\r\n\t to = [to];\r\n\t }\r\n\t\r\n\t var path = 'M{0},{1}';\r\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\r\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\r\n\t }\r\n\t var pathValues = [from.x, from.y];\r\n\t for (i = 0, len = to.length; i < len; i++) {\r\n\t pathValues.push(to[i].x);\r\n\t pathValues.push(to[i].y);\r\n\t }\r\n\t\r\n\t var line = chart.paper.path(path, pathValues);\r\n\t line.attr({\r\n\t stroke: chart.options['line-color'],\r\n\t 'stroke-width': chart.options['line-width'],\r\n\t 'arrow-end': chart.options['arrow-end']\r\n\t });\r\n\t\r\n\t var font = chart.options.font;\r\n\t var fontF = chart.options['font-family'];\r\n\t var fontW = chart.options['font-weight'];\r\n\t\r\n\t if (font) line.attr({ 'font': font });\r\n\t if (fontF) line.attr({ 'font-family': fontF });\r\n\t if (fontW) line.attr({ 'font-weight': fontW });\r\n\t\r\n\t if (text) {\r\n\t\r\n\t var centerText = false;\r\n\t\r\n\t var textPath = chart.paper.text(0, 0, text);\r\n\t\r\n\t var isHorizontal = false;\r\n\t var firstTo = to[0];\r\n\t\r\n\t if (from.y === firstTo.y) {\r\n\t isHorizontal = true;\r\n\t }\r\n\t\r\n\t var x = 0,\r\n\t y = 0;\r\n\t\r\n\t if (centerText) {\r\n\t if (from.x > firstTo.x) {\r\n\t x = from.x - (from.x - firstTo.x)/2;\r\n\t } else {\r\n\t x = firstTo.x - (firstTo.x - from.x)/2;\r\n\t }\r\n\t\r\n\t if (from.y > firstTo.y) {\r\n\t y = from.y - (from.y - firstTo.y)/2;\r\n\t } else {\r\n\t y = firstTo.y - (firstTo.y - from.y)/2;\r\n\t }\r\n\t\r\n\t if (isHorizontal) {\r\n\t x -= textPath.getBBox().width/2;\r\n\t y -= chart.options['text-margin'];\r\n\t } else {\r\n\t x += chart.options['text-margin'];\r\n\t y -= textPath.getBBox().height/2;\r\n\t }\r\n\t } else {\r\n\t x = from.x;\r\n\t y = from.y;\r\n\t\r\n\t if (isHorizontal) {\r\n\t x += chart.options['text-margin']/2;\r\n\t y -= chart.options['text-margin'];\r\n\t } else {\r\n\t x += chart.options['text-margin']/2;\r\n\t y += chart.options['text-margin'];\r\n\t }\r\n\t }\r\n\t\r\n\t textPath.attr({\r\n\t 'text-anchor': 'start',\r\n\t 'font-size': chart.options['font-size'],\r\n\t 'fill': chart.options['font-color'],\r\n\t x: x,\r\n\t y: y\r\n\t });\r\n\t\r\n\t if (font) textPath.attr({ 'font': font });\r\n\t if (fontF) textPath.attr({ 'font-family': fontF });\r\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\r\n\t }\r\n\t\r\n\t return line;\r\n\t}\r\n\t\r\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\r\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\r\n\t var denominator, a, b, numerator1, numerator2, result = {\r\n\t x: null,\r\n\t y: null,\r\n\t onLine1: false,\r\n\t onLine2: false\r\n\t };\r\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\r\n\t if (denominator === 0) {\r\n\t return result;\r\n\t }\r\n\t a = line1StartY - line2StartY;\r\n\t b = line1StartX - line2StartX;\r\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\r\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\r\n\t a = numerator1 / denominator;\r\n\t b = numerator2 / denominator;\r\n\t\r\n\t // if we cast these lines infinitely in both directions, they intersect here:\r\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\r\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\r\n\t /*\r\n\t // it is worth noting that this should be the same as:\r\n\t x = line2StartX + (b * (line2EndX - line2StartX));\r\n\t y = line2StartX + (b * (line2EndY - line2StartY));\r\n\t */\r\n\t // if line1 is a segment and line2 is infinite, they intersect if:\r\n\t if (a > 0 && a < 1) {\r\n\t result.onLine1 = true;\r\n\t }\r\n\t // if line2 is a segment and line1 is infinite, they intersect if:\r\n\t if (b > 0 && b < 1) {\r\n\t result.onLine2 = true;\r\n\t }\r\n\t // if line1 and line2 are segments, they intersect if both of the above are true\r\n\t return result;\r\n\t}\r\n\t\r\n\tmodule.exports = {\r\n\t\tdrawPath: drawPath,\r\n\t\tdrawLine: drawLine,\r\n\t\tcheckLineIntersection: checkLineIntersection\r\n\t};\r\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\r\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\r\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\r\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\r\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\r\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\r\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\r\n\t\r\n\tfunction parse(input) {\r\n\t input = input || '';\r\n\t input = input.trim();\r\n\t\r\n\t var chart = {\r\n\t symbols: {},\r\n\t start: null,\r\n\t drawSVG: function(container, options) {\r\n\t var self = this;\r\n\t\r\n\t if (this.diagram) {\r\n\t this.diagram.clean();\r\n\t }\r\n\t\r\n\t var diagram = new FlowChart(container, options);\r\n\t this.diagram = diagram;\r\n\t var dispSymbols = {};\r\n\t\r\n\t function getDisplaySymbol(s) {\r\n\t if (dispSymbols[s.key]) {\r\n\t return dispSymbols[s.key];\r\n\t }\r\n\t\r\n\t switch (s.symbolType) {\r\n\t case 'start':\r\n\t dispSymbols[s.key] = new Start(diagram, s);\r\n\t break;\r\n\t case 'end':\r\n\t dispSymbols[s.key] = new End(diagram, s);\r\n\t break;\r\n\t case 'operation':\r\n\t dispSymbols[s.key] = new Operation(diagram, s);\r\n\t break;\r\n\t case 'inputoutput':\r\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \r\n\t break;\r\n\t case 'subroutine':\r\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\r\n\t break;\r\n\t case 'condition':\r\n\t dispSymbols[s.key] = new Condition(diagram, s);\r\n\t break;\r\n\t default:\r\n\t return new Error('Wrong symbol type!');\r\n\t }\r\n\t\r\n\t return dispSymbols[s.key];\r\n\t }\r\n\t\r\n\t (function constructChart(s, prevDisp, prev) {\r\n\t var dispSymb = getDisplaySymbol(s);\r\n\t\r\n\t if (self.start === s) {\r\n\t diagram.startWith(dispSymb);\r\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\r\n\t if (prevDisp instanceof(Condition)) {\r\n\t if (prev.yes === s) {\r\n\t prevDisp.yes(dispSymb);\r\n\t }\r\n\t if (prev.no === s) {\r\n\t prevDisp.no(dispSymb);\r\n\t }\r\n\t } else {\r\n\t prevDisp.then(dispSymb);\r\n\t }\r\n\t }\r\n\t\r\n\t if (dispSymb.pathOk) {\r\n\t return dispSymb;\r\n\t }\r\n\t\r\n\t if (dispSymb instanceof(Condition)) {\r\n\t if (s.yes) {\r\n\t constructChart(s.yes, dispSymb, s);\r\n\t }\r\n\t if (s.no) {\r\n\t constructChart(s.no, dispSymb, s);\r\n\t }\r\n\t } else if (s.next) {\r\n\t constructChart(s.next, dispSymb, s);\r\n\t }\r\n\t\r\n\t return dispSymb;\r\n\t })(this.start);\r\n\t\r\n\t diagram.render();\r\n\t },\r\n\t clean: function() {\r\n\t this.diagram.clean();\r\n\t }\r\n\t };\r\n\t\r\n\t var lines = [];\r\n\t var prevBreak = 0;\r\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\r\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\r\n\t var line0 = input.substring(prevBreak, i0);\r\n\t prevBreak = i0 + 1;\r\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\r\n\t }\r\n\t }\r\n\t\r\n\t if(prevBreak < input.length) {\r\n\t lines.push(input.substr(prevBreak));\r\n\t }\r\n\t\r\n\t for (var l = 1, len = lines.length; l < len;) {\r\n\t var currentLine = lines[l];\r\n\t\r\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\r\n\t lines[l - 1] += '\\n' + currentLine;\r\n\t lines.splice(l, 1);\r\n\t len--;\r\n\t } else {\r\n\t l++;\r\n\t }\r\n\t }\r\n\t\r\n\t function getStyle(s){\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t return s.substring(startIndex,endIndex);\r\n\t }\r\n\t return '{}';\r\n\t }\r\n\t\r\n\t function getSymbValue(s){\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t return s.substring(startIndex,endIndex);\r\n\t }\r\n\t return '';\r\n\t }\r\n\t\r\n\t function getSymbol(s) {\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \r\n\t }\r\n\t return chart.symbols[s];\r\n\t }\r\n\t\r\n\t function getNextPath(s) {\r\n\t var next = 'next';\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t next = flowSymb.substring(startIndex, endIndex);\r\n\t if (next.indexOf(',') < 0) {\r\n\t if (next !== 'yes' && next !== 'no') {\r\n\t next = 'next, ' + next;\r\n\t }\r\n\t }\r\n\t }\r\n\t return next;\r\n\t }\r\n\t\r\n\t while (lines.length > 0) {\r\n\t var line = lines.splice(0, 1)[0].trim();\r\n\t\r\n\t if (line.indexOf('=>') >= 0) {\r\n\t // definition\r\n\t var parts = line.split('=>');\r\n\t var symbol = {\r\n\t key: parts[0].replace(/\\(.*\\)/, ''),\r\n\t symbolType: parts[1],\r\n\t text: null,\r\n\t link: null,\r\n\t target: null,\r\n\t flowstate: null,\r\n\t lineStyle: {},\r\n\t params: {}\r\n\t };\r\n\t\r\n\t //parse parameters\r\n\t var params = parts[0].match(/\\((.*)\\)/);\r\n\t if (params && params.length > 1){\r\n\t var entries = params[1].split(',');\r\n\t for(var i = 0; i < entries.length; i++) {\r\n\t var entry = entries[0].split('=');\r\n\t if (entry.length == 2){\r\n\t symbol.params[entry[0]] = entry[1];\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t var sub;\r\n\t\r\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\r\n\t sub = symbol.symbolType.split(': ');\r\n\t symbol.symbolType = sub.shift();\r\n\t symbol.text = sub.join(': ');\r\n\t }\r\n\t\r\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\r\n\t sub = symbol.text.split(':>');\r\n\t symbol.text = sub.shift();\r\n\t symbol.link = sub.join(':>');\r\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\r\n\t sub = symbol.symbolType.split(':>');\r\n\t symbol.symbolType = sub.shift();\r\n\t symbol.link = sub.join(':>');\r\n\t }\r\n\t\r\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\r\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\r\n\t }\r\n\t\r\n\t /* adding support for links */\r\n\t if (symbol.link) {\r\n\t var startIndex = symbol.link.indexOf('[') + 1;\r\n\t var endIndex = symbol.link.indexOf(']');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\r\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\r\n\t }\r\n\t }\r\n\t /* end of link support */\r\n\t\r\n\t /* adding support for flowstates */\r\n\t if (symbol.text) {\r\n\t if (symbol.text.indexOf('|') >= 0) {\r\n\t var txtAndState = symbol.text.split('|');\r\n\t symbol.flowstate = txtAndState.pop().trim();\r\n\t symbol.text = txtAndState.join('|');\r\n\t }\r\n\t }\r\n\t /* end of flowstate support */\r\n\t\r\n\t chart.symbols[symbol.key] = symbol;\r\n\t\r\n\t } else if (line.indexOf('->') >= 0) {\r\n\t // flow\r\n\t var flowSymbols = line.split('->');\r\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\r\n\t var flowSymb = flowSymbols[i];\r\n\t var symbVal = getSymbValue(flowSymb);\r\n\t\r\n\t if (symbVal === 'true' || symbVal === 'false') {\r\n\t // map true or false to yes or no respectively\r\n\t flowSymb = flowSymb.replace('true', 'yes');\r\n\t flowSymb = flowSymb.replace('false', 'no');\r\n\t }\r\n\t\r\n\t var realSymb = getSymbol(flowSymb);\r\n\t var next = getNextPath(flowSymb);\r\n\t\r\n\t var direction = null;\r\n\t if (next.indexOf(',') >= 0) {\r\n\t var condOpt = next.split(',');\r\n\t next = condOpt[0];\r\n\t direction = condOpt[1].trim();\r\n\t }\r\n\t\r\n\t if (!chart.start) {\r\n\t chart.start = realSymb;\r\n\t }\r\n\t\r\n\t if (i + 1 < lenS) {\r\n\t var nextSymb = flowSymbols[i + 1];\r\n\t realSymb[next] = getSymbol(nextSymb);\r\n\t realSymb['direction_' + next] = direction;\r\n\t direction = null;\r\n\t }\r\n\t }\r\n\t } else if (line.indexOf('@>') >= 0) {\r\n\t\r\n\t // line style\r\n\t var lineStyleSymbols = line.split('@>');\r\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\r\n\t\r\n\t if ((i+1) != lenS){\r\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\r\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\r\n\t\r\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i+1]));\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t }\r\n\t return chart;\r\n\t}\r\n\t\r\n\tmodule.exports = parse;\r\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\r\n\tvar drawPath = drawAPI.drawPath;\r\n\t\r\n\tfunction Condition(chart, options) {\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options);\r\n\t this.textMargin = this.getAttr('text-margin');\r\n\t this.yes_direction = 'bottom';\r\n\t this.no_direction = 'right';\r\n\t this.params = options.params;\r\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\r\n\t if (options.direction_yes === 'right') {\r\n\t this.no_direction = 'bottom';\r\n\t this.yes_direction = 'right';\r\n\t } else {\r\n\t this.no_direction = 'right';\r\n\t this.yes_direction = 'bottom';\r\n\t }\r\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\r\n\t if (options.direction_no === 'right') {\r\n\t this.yes_direction = 'bottom';\r\n\t this.no_direction = 'right';\r\n\t } else {\r\n\t this.yes_direction = 'right';\r\n\t this.no_direction = 'bottom';\r\n\t }\r\n\t } else {\r\n\t this.yes_direction = 'bottom';\r\n\t this.no_direction = 'right';\r\n\t }\r\n\t\r\n\t this.yes_direction = this.yes_direction || 'bottom';\r\n\t this.no_direction = this.no_direction || 'right';\r\n\t\r\n\t this.text.attr({\r\n\t x: this.textMargin * 2\r\n\t });\r\n\t\r\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\r\n\t width += width/2;\r\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\r\n\t height += height/2;\r\n\t height = Math.max(width * 0.5, height);\r\n\t var startX = width/4;\r\n\t var startY = height/4;\r\n\t\r\n\t this.text.attr({\r\n\t x: startX + this.textMargin/2\r\n\t });\r\n\t\r\n\t var start = {x: startX, y: startY};\r\n\t var points = [\r\n\t {x: startX - width/4, y: startY + height/4},\r\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\r\n\t {x: startX - width/4 + width, y: startY + height/4},\r\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\r\n\t {x: startX - width/4, y: startY + height/4}\r\n\t ];\r\n\t\r\n\t var symbol = drawPath(chart, start, points);\r\n\t\r\n\t symbol.attr({\r\n\t stroke: this.getAttr('element-color'),\r\n\t 'stroke-width': this.getAttr('line-width'),\r\n\t fill: this.getAttr('fill')\r\n\t });\r\n\t if (options.link) { symbol.attr('href', options.link); }\r\n\t if (options.target) { symbol.attr('target', options.target); }\r\n\t if (options.key) { symbol.node.id = options.key; }\r\n\t symbol.node.setAttribute('class', this.getAttr('class'));\r\n\t\r\n\t this.text.attr({\r\n\t y: symbol.getBBox().height/2\r\n\t });\r\n\t\r\n\t this.group.push(symbol);\r\n\t symbol.insertBefore(this.text);\r\n\t\r\n\t this.initialize();\r\n\t}\r\n\tinherits(Condition, Symbol);\r\n\t\r\n\tCondition.prototype.render = function() {\r\n\t\r\n\t if (this.yes_direction) {\r\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\r\n\t }\r\n\t\r\n\t if (this.no_direction) {\r\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\r\n\t }\r\n\t\r\n\t var lineLength = this.getAttr('line-length');\r\n\t\r\n\t if (this.bottom_symbol) {\r\n\t var bottomPoint = this.getBottom();\r\n\t\r\n\t if (!this.bottom_symbol.isPositioned) {\r\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\r\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\r\n\t this.bottom_symbol.isPositioned = true;\r\n\t\r\n\t this.bottom_symbol.render();\r\n\t }\r\n\t }\r\n\t\r\n\t if (this.right_symbol) {\r\n\t var rightPoint = this.getRight();\r\n\t\r\n\t if (!this.right_symbol.isPositioned) {\r\n\t\r\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\r\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\t\r\n\t var self = this;\r\n\t (function shift() {\r\n\t var hasSymbolUnder = false;\r\n\t var symb;\r\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n\t symb = self.chart.symbols[i];\r\n\t\r\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \r\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\r\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\r\n\t hasSymbolUnder = true;\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t if (hasSymbolUnder) {\r\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\r\n\t shift();\r\n\t }\r\n\t })();\r\n\t\r\n\t this.right_symbol.isPositioned = true;\r\n\t\r\n\t this.right_symbol.render();\r\n\t }\r\n\t }\r\n\t};\r\n\t\r\n\tCondition.prototype.renderLines = function() {\r\n\t if (this.yes_symbol) {\r\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\r\n\t }\r\n\t\r\n\t if (this.no_symbol) {\r\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\r\n\t }\r\n\t};\r\n\t\r\n\tmodule.exports = Condition;\r\n\n\n/***/ }),\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\r\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\r\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\r\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\r\n\t\r\n\tfunction FlowChart(container, options) {\r\n\t options = options || {};\r\n\t\r\n\t this.paper = new Raphael(container);\r\n\t\r\n\t this.options = defaults(options, defaultOptions);\r\n\t\r\n\t this.symbols = [];\r\n\t this.lines = [];\r\n\t this.start = null;\r\n\t}\r\n\t\r\n\tFlowChart.prototype.handle = function(symbol) {\r\n\t if (this.symbols.indexOf(symbol) <= -1) {\r\n\t this.symbols.push(symbol);\r\n\t }\r\n\t\r\n\t var flowChart = this;\r\n\t\r\n\t if (symbol instanceof(Condition)) {\r\n\t symbol.yes = function(nextSymbol) {\r\n\t symbol.yes_symbol = nextSymbol;\r\n\t if(symbol.no_symbol) {\r\n\t symbol.pathOk = true;\r\n\t }\r\n\t return flowChart.handle(nextSymbol);\r\n\t };\r\n\t symbol.no = function(nextSymbol) {\r\n\t symbol.no_symbol = nextSymbol;\r\n\t if(symbol.yes_symbol) {\r\n\t symbol.pathOk = true;\r\n\t }\r\n\t return flowChart.handle(nextSymbol);\r\n\t };\r\n\t } else {\r\n\t symbol.then = function(nextSymbol) {\r\n\t symbol.next = nextSymbol;\r\n\t symbol.pathOk = true;\r\n\t return flowChart.handle(nextSymbol);\r\n\t };\r\n\t }\r\n\t\r\n\t return symbol;\r\n\t};\r\n\t\r\n\tFlowChart.prototype.startWith = function(symbol) {\r\n\t this.start = symbol;\r\n\t return this.handle(symbol);\r\n\t};\r\n\t\r\n\tFlowChart.prototype.render = function() {\r\n\t var maxWidth = 0,\r\n\t maxHeight = 0,\r\n\t i = 0,\r\n\t len = 0,\r\n\t maxX = 0,\r\n\t maxY = 0,\r\n\t minX = 0,\r\n\t minY = 0,\r\n\t symbol,\r\n\t line;\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t if (symbol.width > maxWidth) {\r\n\t maxWidth = symbol.width;\r\n\t }\r\n\t if (symbol.height > maxHeight) {\r\n\t maxHeight = symbol.height;\r\n\t }\r\n\t }\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\r\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\r\n\t }\r\n\t\r\n\t this.start.render();\r\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t // symbol = this.symbols[i];\r\n\t // symbol.render();\r\n\t // }\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t symbol.renderLines();\r\n\t }\r\n\t\r\n\t maxX = this.maxXFromLine;\r\n\t\r\n\t var x;\r\n\t var y;\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t x = symbol.getX() + symbol.width;\r\n\t y = symbol.getY() + symbol.height;\r\n\t if (x > maxX) {\r\n\t maxX = x;\r\n\t }\r\n\t if (y > maxY) {\r\n\t maxY = y;\r\n\t }\r\n\t }\r\n\t\r\n\t for (i = 0, len = this.lines.length; i < len; i++) {\r\n\t line = this.lines[i].getBBox();\r\n\t x = line.x;\r\n\t y = line.y;\r\n\t var x2 = line.x2;\r\n\t var y2 = line.y2;\r\n\t if (x < minX) {\r\n\t minX = x;\r\n\t }\r\n\t if (y < minY) {\r\n\t minY = y;\r\n\t }\r\n\t if (x2 > maxX) {\r\n\t maxX = x2;\r\n\t }\r\n\t if (y2 > maxY) {\r\n\t maxY = y2;\r\n\t }\r\n\t }\r\n\t\r\n\t var scale = this.options['scale'];\r\n\t var lineWidth = this.options['line-width'];\r\n\t\r\n\t if (minX < 0) minX -= lineWidth;\r\n\t if (minY < 0) minY -= lineWidth;\r\n\t\r\n\t var width = maxX + lineWidth - minX;\r\n\t var height = maxY + lineWidth - minY;\r\n\t\r\n\t this.paper.setSize(width * scale, height * scale);\r\n\t this.paper.setViewBox(minX, minY, width, height, true);\r\n\t};\r\n\t\r\n\tFlowChart.prototype.clean = function() {\r\n\t if (this.paper) {\r\n\t var paperDom = this.paper.canvas;\r\n\t paperDom.parentNode.removeChild(paperDom);\r\n\t }\r\n\t};\r\n\t\r\n\tmodule.exports = FlowChart;\r\n\n\n/***/ }),\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\r\n\tmodule.exports = {\r\n\t 'x': 0,\r\n\t 'y': 0,\r\n\t 'line-width': 3,\r\n\t 'line-length': 50,\r\n\t 'text-margin': 10,\r\n\t 'font-size': 14,\r\n\t 'font-color': 'black',\r\n\t // 'font': 'normal',\r\n\t // 'font-family': 'calibri',\r\n\t // 'font-weight': 'normal',\r\n\t 'line-color': 'black',\r\n\t 'element-color': 'black',\r\n\t 'fill': 'white',\r\n\t 'yes-text': 'yes',\r\n\t 'no-text': 'no',\r\n\t 'arrow-end': 'block',\r\n\t 'class': 'flowchart',\r\n\t 'scale': 1,\r\n\t 'symbols': {\r\n\t 'start': {},\r\n\t 'end': {},\r\n\t 'condition': {},\r\n\t 'inputoutput': {},\r\n\t 'operation': {},\r\n\t 'subroutine': {}\r\n\t }//,\r\n\t // 'flowstate' : {\r\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\r\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\r\n\t // 'future' : { 'fill': '#FFFF99'},\r\n\t // 'invalid': {'fill': '#444444'}\r\n\t // }\r\n\t};\r\n\n\n/***/ }),\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\r\n\tif (!Array.prototype.indexOf) {\r\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\r\n\t \"use strict\";\r\n\t if (this === null) {\r\n\t throw new TypeError();\r\n\t }\r\n\t var t = Object(this);\r\n\t var len = t.length >>> 0;\r\n\t if (len === 0) {\r\n\t return -1;\r\n\t }\r\n\t var n = 0;\r\n\t if (arguments.length > 0) {\r\n\t n = Number(arguments[1]);\r\n\t if (n != n) { // shortcut for verifying if it's NaN\r\n\t n = 0;\r\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\r\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n\t }\r\n\t }\r\n\t if (n >= len) {\r\n\t return -1;\r\n\t }\r\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\r\n\t for (; k < len; k++) {\r\n\t if (k in t && t[k] === searchElement) {\r\n\t return k;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\t\r\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\r\n\tif (!Array.prototype.lastIndexOf) {\r\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\r\n\t \"use strict\";\r\n\t if (this === null) {\r\n\t throw new TypeError();\r\n\t }\r\n\t var t = Object(this);\r\n\t var len = t.length >>> 0;\r\n\t if (len === 0) {\r\n\t return -1;\r\n\t }\r\n\t var n = len;\r\n\t if (arguments.length > 1) {\r\n\t n = Number(arguments[1]);\r\n\t if (n != n) {\r\n\t n = 0;\r\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\r\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n\t }\r\n\t }\r\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\r\n\t for (; k >= 0; k--) {\r\n\t if (k in t && t[k] === searchElement) {\r\n\t return k;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\t\r\n\tif (!String.prototype.trim) {\r\n\t String.prototype.trim = function() {\r\n\t return this.replace(/^\\s+|\\s+$/g, '');\r\n\t };\r\n\t}\n\n/***/ }),\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction End(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n\t options = options || {};\r\n\t options.text = options.text || 'End';\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t}\r\n\tinherits(End, Symbol);\r\n\t\r\n\tmodule.exports = End;\r\n\n\n/***/ }),\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\r\n\tvar drawPath = drawAPI.drawPath;\r\n\t\r\n\tfunction InputOutput(chart, options) {\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options);\r\n\t this.textMargin = this.getAttr('text-margin');\r\n\t\r\n\t this.text.attr({\r\n\t x: this.textMargin * 3\r\n\t });\r\n\t\r\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\r\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\r\n\t var startX = this.textMargin;\r\n\t var startY = height/2;\r\n\t\r\n\t var start = {x: startX, y: startY};\r\n\t var points = [\r\n\t {x: startX - this.textMargin, y: height},\r\n\t {x: startX - this.textMargin + width, y: height},\r\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\r\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\r\n\t {x: startX, y: startY}\r\n\t ];\r\n\t\r\n\t var symbol = drawPath(chart, start, points);\r\n\t\r\n\t symbol.attr({\r\n\t stroke: this.getAttr('element-color'),\r\n\t 'stroke-width': this.getAttr('line-width'),\r\n\t fill: this.getAttr('fill')\r\n\t });\r\n\t if (options.link) { symbol.attr('href', options.link); }\r\n\t if (options.target) { symbol.attr('target', options.target); }\r\n\t if (options.key) { symbol.node.id = options.key; }\r\n\t symbol.node.setAttribute('class', this.getAttr('class'));\r\n\t\r\n\t this.text.attr({\r\n\t y: symbol.getBBox().height/2\r\n\t });\r\n\t\r\n\t this.group.push(symbol);\r\n\t symbol.insertBefore(this.text);\r\n\t\r\n\t this.initialize();\r\n\t}\r\n\tinherits(InputOutput, Symbol);\r\n\t\r\n\tInputOutput.prototype.getLeft = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX() + this.textMargin;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tInputOutput.prototype.getRight = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tmodule.exports = InputOutput;\r\n\n\n/***/ }),\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction Operation(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t}\r\n\tinherits(Operation, Symbol);\r\n\t\r\n\tmodule.exports = Operation;\r\n\n\n/***/ }),\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction Start(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n\t options = options || {};\r\n\t options.text = options.text || 'Start';\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t}\r\n\tinherits(Start, Symbol);\r\n\t\r\n\tmodule.exports = Start;\r\n\t\r\n\t// Start.prototype.render = function() {\r\n\t// if (this.next) {\r\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\r\n\t\r\n\t// var bottomPoint = this.getBottom();\r\n\t// var topPoint = this.next.getTop();\r\n\t\r\n\t// if (!this.next.isPositioned) {\r\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\r\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\r\n\t// this.next.isPositioned = true;\r\n\t\r\n\t// this.next.render();\r\n\t// }\r\n\t// }\r\n\t// };\r\n\t\r\n\t// Start.prototype.renderLines = function() {\r\n\t// if (this.next) {\r\n\t// this.drawLineTo(this.next);\r\n\t// }\r\n\t// };\r\n\n\n/***/ }),\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction Subroutine(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t\r\n\t symbol.attr({\r\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\r\n\t });\r\n\t\r\n\t this.text.attr({\r\n\t 'x': 2 * this.getAttr('text-margin')\r\n\t });\r\n\t\r\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\r\n\t innerWrap.attr({\r\n\t x: this.getAttr('text-margin'),\r\n\t stroke: this.getAttr('element-color'),\r\n\t 'stroke-width': this.getAttr('line-width'),\r\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\r\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\r\n\t fill: this.getAttr('fill')\r\n\t });\r\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\r\n\t\r\n\t var font = this.getAttr('font');\r\n\t var fontF = this.getAttr('font-family');\r\n\t var fontW = this.getAttr('font-weight');\r\n\t\r\n\t if (font) innerWrap.attr({ 'font': font });\r\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\r\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\r\n\t\r\n\t if (options.link) { innerWrap.attr('href', options.link); }\r\n\t if (options.target) { innerWrap.attr('target', options.target); }\r\n\t this.group.push(innerWrap);\r\n\t innerWrap.insertBefore(this.text);\r\n\t\r\n\t this.initialize();\r\n\t}\r\n\tinherits(Subroutine, Symbol);\r\n\t\r\n\tmodule.exports = Subroutine;\r\n\n\n/***/ }),\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\r\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\r\n\t\t(function( $ ) {\r\n\t\t\t$.fn.flowChart = function( options ) {\r\n\t\t\t\treturn this.each(function() {\r\n\t\t\t\t\tvar $this = $(this);\r\n\t\t\t\t\tvar chart = parse($this.text());\r\n\t\t\t\t\t$this.html('');\r\n\t\t\t\t\tchart.drawSVG(this, options);\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t})(jQuery); // eslint-disable-line\r\n\t}\r\n\n\n/***/ }),\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"," \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 b25fc93d093648e4134a","require('./src/flowchart.shim');\r\nvar parse = require('./src/flowchart.parse');\r\nrequire('./src/jquery-plugin');\r\n\r\nvar FlowChart = {\r\n\tparse: parse\r\n};\r\n\r\nif (typeof window !== 'undefined') {\r\n\twindow.flowchart = FlowChart;\r\n}\r\n\r\nmodule.exports = FlowChart;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\r\n if (!options || typeof options === 'function') {\r\n return defaultOptions;\r\n }\r\n\r\n var merged = {};\r\n for (var attrname in defaultOptions) {\r\n merged[attrname] = defaultOptions[attrname];\r\n }\r\n\r\n for (attrname in options) {\r\n if (options[attrname]) {\r\n if (typeof merged[attrname] === 'object') {\r\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\r\n } else {\r\n merged[attrname] = options[attrname];\r\n }\r\n }\r\n }\r\n return merged;\r\n}\r\n\r\nfunction _inherits(ctor, superCtor) {\r\n if (typeof(Object.create) === 'function') {\r\n // implementation from standard node.js 'util' module\r\n ctor.super_ = superCtor;\r\n ctor.prototype = Object.create(superCtor.prototype, {\r\n constructor: {\r\n value: ctor,\r\n enumerable: false,\r\n writable: true,\r\n configurable: true\r\n }\r\n });\r\n } else {\r\n // old school shim for old browsers\r\n ctor.super_ = superCtor;\r\n var TempCtor = function () {};\r\n TempCtor.prototype = superCtor.prototype;\r\n ctor.prototype = new TempCtor();\r\n ctor.prototype.constructor = ctor;\r\n }\r\n}\r\n\r\n// move dependent functions to a container so that\r\n// they can be overriden easier in no jquery environment (node.js)\r\nmodule.exports = {\r\n defaults: _defaults,\r\n inherits: _inherits\r\n};\r\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');\r\nvar drawLine = drawAPI.drawLine;\r\nvar checkLineIntersection = drawAPI.checkLineIntersection;\r\n\r\nfunction Symbol(chart, options, symbol) {\r\n this.chart = chart;\r\n this.group = this.chart.paper.set();\r\n this.symbol = symbol;\r\n this.connectedTo = [];\r\n this.symbolType = options.symbolType;\r\n this.flowstate = (options.flowstate || 'future');\r\n this.lineStyle = (options.lineStyle || {});\r\n this.key = (options.key || '');\r\n\r\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\r\n\r\n this.text = this.chart.paper.text(0, 0, options.text);\r\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\r\n if (options.key) { this.text.node.id = options.key + 't'; }\r\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\r\n\r\n this.text.attr({\r\n 'text-anchor': 'start',\r\n 'x' : this.getAttr('text-margin'),\r\n 'fill' : this.getAttr('font-color'),\r\n 'font-size' : this.getAttr('font-size')\r\n });\r\n\r\n var font = this.getAttr('font');\r\n var fontF = this.getAttr('font-family');\r\n var fontW = this.getAttr('font-weight');\r\n\r\n if (font) this.text.attr({ 'font': font });\r\n if (fontF) this.text.attr({ 'font-family': fontF });\r\n if (fontW) this.text.attr({ 'font-weight': fontW });\r\n\r\n if (options.link) { this.text.attr('href', options.link); }\r\n if (options.target) { this.text.attr('target', options.target); }\r\n\r\n var maxWidth = this.getAttr('maxWidth');\r\n if (maxWidth) {\r\n // using this approach: http://stackoverflow.com/a/3153457/22466\r\n var words = options.text.split(' ');\r\n var tempText = \"\";\r\n for (var i=0, ii=words.length; i maxWidth) {\r\n tempText += \"\\n\" + word;\r\n } else {\r\n tempText += \" \" + word;\r\n }\r\n }\r\n this.text.attr(\"text\", tempText.substring(1));\r\n }\r\n\r\n this.group.push(this.text);\r\n\r\n if (symbol) {\r\n var tmpMargin = this.getAttr('text-margin');\r\n\r\n symbol.attr({\r\n 'fill' : this.getAttr('fill'),\r\n 'stroke' : this.getAttr('element-color'),\r\n 'stroke-width' : this.getAttr('line-width'),\r\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\r\n 'height' : this.text.getBBox().height + 2 * tmpMargin\r\n });\r\n\r\n symbol.node.setAttribute('class', this.getAttr('class'));\r\n\r\n if (options.link) { symbol.attr('href', options.link); }\r\n if (options.target) { symbol.attr('target', options.target); }\r\n if (options.key) { symbol.node.id = options.key; }\r\n\r\n this.group.push(symbol);\r\n symbol.insertBefore(this.text);\r\n\r\n this.text.attr({\r\n 'y': symbol.getBBox().height/2\r\n });\r\n\r\n this.initialize();\r\n }\r\n\r\n}\r\n\r\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\r\nSymbol.prototype.getAttr = function(attName) {\r\n if (!this.chart) {\r\n return undefined;\r\n }\r\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\r\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\r\n var opt1;\r\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\r\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\r\n }\r\n return (opt1 || opt2 || opt3);\r\n};\r\n\r\nSymbol.prototype.initialize = function() {\r\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\r\n\r\n this.width = this.group.getBBox().width;\r\n this.height = this.group.getBBox().height;\r\n};\r\n\r\nSymbol.prototype.getCenter = function() {\r\n return {x: this.getX() + this.width/2,\r\n y: this.getY() + this.height/2};\r\n};\r\n\r\nSymbol.prototype.getX = function() {\r\n return this.group.getBBox().x;\r\n};\r\n\r\nSymbol.prototype.getY = function() {\r\n return this.group.getBBox().y;\r\n};\r\n\r\nSymbol.prototype.shiftX = function(x) {\r\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\r\n};\r\n\r\nSymbol.prototype.setX = function(x) {\r\n this.group.transform('t' + x + ',' + this.getY());\r\n};\r\n\r\nSymbol.prototype.shiftY = function(y) {\r\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\r\n};\r\n\r\nSymbol.prototype.setY = function(y) {\r\n this.group.transform('t' + this.getX() + ',' + y);\r\n};\r\n\r\nSymbol.prototype.getTop = function() {\r\n var y = this.getY();\r\n var x = this.getX() + this.width/2;\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.getBottom = function() {\r\n var y = this.getY() + this.height;\r\n var x = this.getX() + this.width/2;\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.getLeft = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX();\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.getRight = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX() + this.group.getBBox().width;\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.render = function() {\r\n if (this.next) {\r\n\r\n var lineLength = this.getAttr('line-length');\r\n\r\n if (this.next_direction === 'right') {\r\n\r\n var rightPoint = this.getRight();\r\n\r\n if (!this.next.isPositioned) {\r\n\r\n this.next.setY(rightPoint.y - this.next.height/2);\r\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\r\n var self = this;\r\n (function shift() {\r\n var hasSymbolUnder = false;\r\n var symb;\r\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n symb = self.chart.symbols[i];\r\n\r\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\r\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\r\n hasSymbolUnder = true;\r\n break;\r\n }\r\n }\r\n\r\n if (hasSymbolUnder) {\r\n self.next.setX(symb.getX() + symb.width + lineLength);\r\n shift();\r\n }\r\n })();\r\n\r\n this.next.isPositioned = true;\r\n\r\n this.next.render();\r\n }\r\n } else {\r\n var bottomPoint = this.getBottom();\r\n\r\n if (!this.next.isPositioned) {\r\n this.next.shiftY(this.getY() + this.height + lineLength);\r\n this.next.setX(bottomPoint.x - this.next.width/2);\r\n this.next.isPositioned = true;\r\n\r\n this.next.render();\r\n }\r\n }\r\n }\r\n};\r\n\r\nSymbol.prototype.renderLines = function() {\r\n if (this.next) {\r\n if (this.next_direction) {\r\n this.drawLineTo(this.next, '', this.next_direction);\r\n } else {\r\n this.drawLineTo(this.next);\r\n }\r\n }\r\n};\r\n\r\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\r\n if (this.connectedTo.indexOf(symbol) < 0) {\r\n this.connectedTo.push(symbol);\r\n }\r\n\r\n var x = this.getCenter().x,\r\n y = this.getCenter().y,\r\n right = this.getRight(),\r\n bottom = this.getBottom(),\r\n left = this.getLeft();\r\n\r\n var symbolX = symbol.getCenter().x,\r\n symbolY = symbol.getCenter().y,\r\n symbolTop = symbol.getTop(),\r\n symbolRight = symbol.getRight(),\r\n symbolLeft = symbol.getLeft();\r\n\r\n var isOnSameColumn = x === symbolX,\r\n isOnSameLine = y === symbolY,\r\n isUnder = y < symbolY,\r\n isUpper = y > symbolY || this === symbol,\r\n isLeft = x > symbolX,\r\n isRight = x < symbolX;\r\n\r\n var maxX = 0,\r\n line,\r\n lineLength = this.getAttr('line-length'),\r\n lineWith = this.getAttr('line-width');\r\n\r\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\r\n line = drawLine(this.chart, bottom, symbolTop, text);\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x;\r\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\r\n line = drawLine(this.chart, right, symbolLeft, text);\r\n this.rightStart = true;\r\n symbol.leftEnd = true;\r\n maxX = symbolLeft.x;\r\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\r\n line = drawLine(this.chart, left, symbolRight, text);\r\n this.leftStart = true;\r\n symbol.rightEnd = true;\r\n maxX = symbolRight.x;\r\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\r\n line = drawLine(this.chart, right, [\r\n {x: right.x + lineLength/2, y: right.y},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\r\n line = drawLine(this.chart, right, [\r\n {x: right.x + lineLength/2, y: right.y},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((!origin || origin === 'bottom') && isLeft) {\r\n if (this.leftEnd && isUpper) {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n } else {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n }\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n } else if ((!origin || origin === 'bottom') && isRight) {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n } else if ((origin && origin === 'right') && isLeft) {\r\n line = drawLine(this.chart, right, [\r\n {x: right.x + lineLength/2, y: right.y},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((origin && origin === 'right') && isRight) {\r\n line = drawLine(this.chart, right, [\r\n {x: symbolTop.x, y: right.y},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: bottom.y + lineLength/2},\r\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x + lineLength/2;\r\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\r\n var diffX = left.x - lineLength/2;\r\n if (symbolLeft.x < left.x) {\r\n diffX = symbolLeft.x - lineLength/2;\r\n }\r\n line = drawLine(this.chart, left, [\r\n {x: diffX, y: left.y},\r\n {x: diffX, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.leftStart = true;\r\n symbol.topEnd = true;\r\n maxX = left.x;\r\n } else if ((origin === 'left')) {\r\n line = drawLine(this.chart, left, [\r\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\r\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.leftStart = true;\r\n symbol.topEnd = true;\r\n maxX = left.x;\r\n }\r\n\r\n //update line style\r\n if (this.lineStyle[symbol.key] && line){\r\n line.attr( this.lineStyle[symbol.key]);\r\n }\r\n\r\n if (line) {\r\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\r\n var otherLine = this.chart.lines[l];\r\n var len;\r\n\r\n var ePath = otherLine.attr('path'),\r\n lPath = line.attr('path');\r\n\r\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\r\n var newPath = [];\r\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\r\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\r\n\r\n var line1_from_x = newPath[0][1];\r\n var line1_from_y = newPath[0][2];\r\n var line1_to_x = newPath[1][1];\r\n var line1_to_y = newPath[1][2];\r\n\r\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\r\n var newLinePath = [];\r\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\r\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\r\n\r\n var line2_from_x = newLinePath[0][1];\r\n var line2_from_y = newLinePath[0][2];\r\n var line2_to_x = newLinePath[1][1];\r\n var line2_to_y = newLinePath[1][2];\r\n\r\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);\r\n if (res.onLine1 && res.onLine2) {\r\n\r\n var newSegment;\r\n if (line2_from_y === line2_to_y) {\r\n if (line2_from_x > line2_to_x) {\r\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n } else {\r\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n }\r\n } else {\r\n if (line2_from_y > line2_to_y) {\r\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n } else {\r\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n }\r\n }\r\n\r\n lP += 2;\r\n len += 2;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.chart.lines.push(line);\r\n }\r\n\r\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\r\n this.chart.maxXFromLine = maxX;\r\n }\r\n};\r\n\r\nmodule.exports = Symbol;\r\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) {\r\n var i, len;\r\n var path = 'M{0},{1}';\r\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\r\n path += ' L{' + i + '},{' + (i + 1) + '}';\r\n }\r\n var pathValues = [location.x, location.y];\r\n for (i = 0, len = points.length; i < len; i++) {\r\n pathValues.push(points[i].x);\r\n pathValues.push(points[i].y);\r\n }\r\n var symbol = chart.paper.path(path, pathValues);\r\n symbol.attr('stroke', chart.options['element-color']);\r\n symbol.attr('stroke-width', chart.options['line-width']);\r\n\r\n var font = chart.options.font;\r\n var fontF = chart.options['font-family'];\r\n var fontW = chart.options['font-weight'];\r\n\r\n if (font) symbol.attr({ 'font': font });\r\n if (fontF) symbol.attr({ 'font-family': fontF });\r\n if (fontW) symbol.attr({ 'font-weight': fontW });\r\n\r\n return symbol;\r\n}\r\n\r\nfunction drawLine(chart, from, to, text) {\r\n var i, len;\r\n\r\n if (Object.prototype.toString.call(to) !== '[object Array]') {\r\n to = [to];\r\n }\r\n\r\n var path = 'M{0},{1}';\r\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\r\n path += ' L{' + i + '},{' + (i + 1) + '}';\r\n }\r\n var pathValues = [from.x, from.y];\r\n for (i = 0, len = to.length; i < len; i++) {\r\n pathValues.push(to[i].x);\r\n pathValues.push(to[i].y);\r\n }\r\n\r\n var line = chart.paper.path(path, pathValues);\r\n line.attr({\r\n stroke: chart.options['line-color'],\r\n 'stroke-width': chart.options['line-width'],\r\n 'arrow-end': chart.options['arrow-end']\r\n });\r\n\r\n var font = chart.options.font;\r\n var fontF = chart.options['font-family'];\r\n var fontW = chart.options['font-weight'];\r\n\r\n if (font) line.attr({ 'font': font });\r\n if (fontF) line.attr({ 'font-family': fontF });\r\n if (fontW) line.attr({ 'font-weight': fontW });\r\n\r\n if (text) {\r\n\r\n var centerText = false;\r\n\r\n var textPath = chart.paper.text(0, 0, text);\r\n\r\n var isHorizontal = false;\r\n var firstTo = to[0];\r\n\r\n if (from.y === firstTo.y) {\r\n isHorizontal = true;\r\n }\r\n\r\n var x = 0,\r\n y = 0;\r\n\r\n if (centerText) {\r\n if (from.x > firstTo.x) {\r\n x = from.x - (from.x - firstTo.x)/2;\r\n } else {\r\n x = firstTo.x - (firstTo.x - from.x)/2;\r\n }\r\n\r\n if (from.y > firstTo.y) {\r\n y = from.y - (from.y - firstTo.y)/2;\r\n } else {\r\n y = firstTo.y - (firstTo.y - from.y)/2;\r\n }\r\n\r\n if (isHorizontal) {\r\n x -= textPath.getBBox().width/2;\r\n y -= chart.options['text-margin'];\r\n } else {\r\n x += chart.options['text-margin'];\r\n y -= textPath.getBBox().height/2;\r\n }\r\n } else {\r\n x = from.x;\r\n y = from.y;\r\n\r\n if (isHorizontal) {\r\n x += chart.options['text-margin']/2;\r\n y -= chart.options['text-margin'];\r\n } else {\r\n x += chart.options['text-margin']/2;\r\n y += chart.options['text-margin'];\r\n }\r\n }\r\n\r\n textPath.attr({\r\n 'text-anchor': 'start',\r\n 'font-size': chart.options['font-size'],\r\n 'fill': chart.options['font-color'],\r\n x: x,\r\n y: y\r\n });\r\n\r\n if (font) textPath.attr({ 'font': font });\r\n if (fontF) textPath.attr({ 'font-family': fontF });\r\n if (fontW) textPath.attr({ 'font-weight': fontW });\r\n }\r\n\r\n return line;\r\n}\r\n\r\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\r\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\r\n var denominator, a, b, numerator1, numerator2, result = {\r\n x: null,\r\n y: null,\r\n onLine1: false,\r\n onLine2: false\r\n };\r\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\r\n if (denominator === 0) {\r\n return result;\r\n }\r\n a = line1StartY - line2StartY;\r\n b = line1StartX - line2StartX;\r\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\r\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\r\n a = numerator1 / denominator;\r\n b = numerator2 / denominator;\r\n\r\n // if we cast these lines infinitely in both directions, they intersect here:\r\n result.x = line1StartX + (a * (line1EndX - line1StartX));\r\n result.y = line1StartY + (a * (line1EndY - line1StartY));\r\n /*\r\n // it is worth noting that this should be the same as:\r\n x = line2StartX + (b * (line2EndX - line2StartX));\r\n y = line2StartX + (b * (line2EndY - line2StartY));\r\n */\r\n // if line1 is a segment and line2 is infinite, they intersect if:\r\n if (a > 0 && a < 1) {\r\n result.onLine1 = true;\r\n }\r\n // if line2 is a segment and line1 is infinite, they intersect if:\r\n if (b > 0 && b < 1) {\r\n result.onLine2 = true;\r\n }\r\n // if line1 and line2 are segments, they intersect if both of the above are true\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n\tdrawPath: drawPath,\r\n\tdrawLine: drawLine,\r\n\tcheckLineIntersection: checkLineIntersection\r\n};\r\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');\r\nvar Start = require('./flowchart.symbol.start');\r\nvar End = require('./flowchart.symbol.end');\r\nvar Operation = require('./flowchart.symbol.operation');\r\nvar InputOutput = require('./flowchart.symbol.inputoutput');\r\nvar Subroutine = require('./flowchart.symbol.subroutine');\r\nvar Condition = require('./flowchart.symbol.condition');\r\n\r\nfunction parse(input) {\r\n input = input || '';\r\n input = input.trim();\r\n\r\n var chart = {\r\n symbols: {},\r\n start: null,\r\n drawSVG: function(container, options) {\r\n var self = this;\r\n\r\n if (this.diagram) {\r\n this.diagram.clean();\r\n }\r\n\r\n var diagram = new FlowChart(container, options);\r\n this.diagram = diagram;\r\n var dispSymbols = {};\r\n\r\n function getDisplaySymbol(s) {\r\n if (dispSymbols[s.key]) {\r\n return dispSymbols[s.key];\r\n }\r\n\r\n switch (s.symbolType) {\r\n case 'start':\r\n dispSymbols[s.key] = new Start(diagram, s);\r\n break;\r\n case 'end':\r\n dispSymbols[s.key] = new End(diagram, s);\r\n break;\r\n case 'operation':\r\n dispSymbols[s.key] = new Operation(diagram, s);\r\n break;\r\n case 'inputoutput':\r\n dispSymbols[s.key] = new InputOutput(diagram, s); \r\n break;\r\n case 'subroutine':\r\n dispSymbols[s.key] = new Subroutine(diagram, s);\r\n break;\r\n case 'condition':\r\n dispSymbols[s.key] = new Condition(diagram, s);\r\n break;\r\n default:\r\n return new Error('Wrong symbol type!');\r\n }\r\n\r\n return dispSymbols[s.key];\r\n }\r\n\r\n (function constructChart(s, prevDisp, prev) {\r\n var dispSymb = getDisplaySymbol(s);\r\n\r\n if (self.start === s) {\r\n diagram.startWith(dispSymb);\r\n } else if (prevDisp && prev && !prevDisp.pathOk) {\r\n if (prevDisp instanceof(Condition)) {\r\n if (prev.yes === s) {\r\n prevDisp.yes(dispSymb);\r\n }\r\n if (prev.no === s) {\r\n prevDisp.no(dispSymb);\r\n }\r\n } else {\r\n prevDisp.then(dispSymb);\r\n }\r\n }\r\n\r\n if (dispSymb.pathOk) {\r\n return dispSymb;\r\n }\r\n\r\n if (dispSymb instanceof(Condition)) {\r\n if (s.yes) {\r\n constructChart(s.yes, dispSymb, s);\r\n }\r\n if (s.no) {\r\n constructChart(s.no, dispSymb, s);\r\n }\r\n } else if (s.next) {\r\n constructChart(s.next, dispSymb, s);\r\n }\r\n\r\n return dispSymb;\r\n })(this.start);\r\n\r\n diagram.render();\r\n },\r\n clean: function() {\r\n this.diagram.clean();\r\n }\r\n };\r\n\r\n var lines = [];\r\n var prevBreak = 0;\r\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\r\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\r\n var line0 = input.substring(prevBreak, i0);\r\n prevBreak = i0 + 1;\r\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\r\n }\r\n }\r\n\r\n if(prevBreak < input.length) {\r\n lines.push(input.substr(prevBreak));\r\n }\r\n\r\n for (var l = 1, len = lines.length; l < len;) {\r\n var currentLine = lines[l];\r\n\r\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\r\n lines[l - 1] += '\\n' + currentLine;\r\n lines.splice(l, 1);\r\n len--;\r\n } else {\r\n l++;\r\n }\r\n }\r\n\r\n function getStyle(s){\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n return s.substring(startIndex,endIndex);\r\n }\r\n return '{}';\r\n }\r\n\r\n function getSymbValue(s){\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n return s.substring(startIndex,endIndex);\r\n }\r\n return '';\r\n }\r\n\r\n function getSymbol(s) {\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n return chart.symbols[s.substring(0, startIndex - 1)]; \r\n }\r\n return chart.symbols[s];\r\n }\r\n\r\n function getNextPath(s) {\r\n var next = 'next';\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n next = flowSymb.substring(startIndex, endIndex);\r\n if (next.indexOf(',') < 0) {\r\n if (next !== 'yes' && next !== 'no') {\r\n next = 'next, ' + next;\r\n }\r\n }\r\n }\r\n return next;\r\n }\r\n\r\n while (lines.length > 0) {\r\n var line = lines.splice(0, 1)[0].trim();\r\n\r\n if (line.indexOf('=>') >= 0) {\r\n // definition\r\n var parts = line.split('=>');\r\n var symbol = {\r\n key: parts[0].replace(/\\(.*\\)/, ''),\r\n symbolType: parts[1],\r\n text: null,\r\n link: null,\r\n target: null,\r\n flowstate: null,\r\n lineStyle: {},\r\n params: {}\r\n };\r\n\r\n //parse parameters\r\n var params = parts[0].match(/\\((.*)\\)/);\r\n if (params && params.length > 1){\r\n var entries = params[1].split(',');\r\n for(var i = 0; i < entries.length; i++) {\r\n var entry = entries[0].split('=');\r\n if (entry.length == 2){\r\n symbol.params[entry[0]] = entry[1];\r\n }\r\n }\r\n }\r\n\r\n var sub;\r\n\r\n if (symbol.symbolType.indexOf(': ') >= 0) {\r\n sub = symbol.symbolType.split(': ');\r\n symbol.symbolType = sub.shift();\r\n symbol.text = sub.join(': ');\r\n }\r\n\r\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\r\n sub = symbol.text.split(':>');\r\n symbol.text = sub.shift();\r\n symbol.link = sub.join(':>');\r\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\r\n sub = symbol.symbolType.split(':>');\r\n symbol.symbolType = sub.shift();\r\n symbol.link = sub.join(':>');\r\n }\r\n\r\n if (symbol.symbolType.indexOf('\\n') >= 0) {\r\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\r\n }\r\n\r\n /* adding support for links */\r\n if (symbol.link) {\r\n var startIndex = symbol.link.indexOf('[') + 1;\r\n var endIndex = symbol.link.indexOf(']');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n symbol.target = symbol.link.substring(startIndex, endIndex);\r\n symbol.link = symbol.link.substring(0, startIndex - 1);\r\n }\r\n }\r\n /* end of link support */\r\n\r\n /* adding support for flowstates */\r\n if (symbol.text) {\r\n if (symbol.text.indexOf('|') >= 0) {\r\n var txtAndState = symbol.text.split('|');\r\n symbol.flowstate = txtAndState.pop().trim();\r\n symbol.text = txtAndState.join('|');\r\n }\r\n }\r\n /* end of flowstate support */\r\n\r\n chart.symbols[symbol.key] = symbol;\r\n\r\n } else if (line.indexOf('->') >= 0) {\r\n // flow\r\n var flowSymbols = line.split('->');\r\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\r\n var flowSymb = flowSymbols[i];\r\n var symbVal = getSymbValue(flowSymb);\r\n\r\n if (symbVal === 'true' || symbVal === 'false') {\r\n // map true or false to yes or no respectively\r\n flowSymb = flowSymb.replace('true', 'yes');\r\n flowSymb = flowSymb.replace('false', 'no');\r\n }\r\n\r\n var realSymb = getSymbol(flowSymb);\r\n var next = getNextPath(flowSymb);\r\n\r\n var direction = null;\r\n if (next.indexOf(',') >= 0) {\r\n var condOpt = next.split(',');\r\n next = condOpt[0];\r\n direction = condOpt[1].trim();\r\n }\r\n\r\n if (!chart.start) {\r\n chart.start = realSymb;\r\n }\r\n\r\n if (i + 1 < lenS) {\r\n var nextSymb = flowSymbols[i + 1];\r\n realSymb[next] = getSymbol(nextSymb);\r\n realSymb['direction_' + next] = direction;\r\n direction = null;\r\n }\r\n }\r\n } else if (line.indexOf('@>') >= 0) {\r\n\r\n // line style\r\n var lineStyleSymbols = line.split('@>');\r\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\r\n\r\n if ((i+1) != lenS){\r\n var curSymb = getSymbol(lineStyleSymbols[i]);\r\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\r\n\r\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i+1]));\r\n }\r\n }\r\n }\r\n\r\n }\r\n return chart;\r\n}\r\n\r\nmodule.exports = parse;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\nvar drawAPI = require('./flowchart.functions');\r\nvar drawPath = drawAPI.drawPath;\r\n\r\nfunction Condition(chart, options) {\r\n options = options || {};\r\n Symbol.call(this, chart, options);\r\n this.textMargin = this.getAttr('text-margin');\r\n this.yes_direction = 'bottom';\r\n this.no_direction = 'right';\r\n this.params = options.params;\r\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\r\n if (options.direction_yes === 'right') {\r\n this.no_direction = 'bottom';\r\n this.yes_direction = 'right';\r\n } else {\r\n this.no_direction = 'right';\r\n this.yes_direction = 'bottom';\r\n }\r\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\r\n if (options.direction_no === 'right') {\r\n this.yes_direction = 'bottom';\r\n this.no_direction = 'right';\r\n } else {\r\n this.yes_direction = 'right';\r\n this.no_direction = 'bottom';\r\n }\r\n } else {\r\n this.yes_direction = 'bottom';\r\n this.no_direction = 'right';\r\n }\r\n\r\n this.yes_direction = this.yes_direction || 'bottom';\r\n this.no_direction = this.no_direction || 'right';\r\n\r\n this.text.attr({\r\n x: this.textMargin * 2\r\n });\r\n\r\n var width = this.text.getBBox().width + 3 * this.textMargin;\r\n width += width/2;\r\n var height = this.text.getBBox().height + 2 * this.textMargin;\r\n height += height/2;\r\n height = Math.max(width * 0.5, height);\r\n var startX = width/4;\r\n var startY = height/4;\r\n\r\n this.text.attr({\r\n x: startX + this.textMargin/2\r\n });\r\n\r\n var start = {x: startX, y: startY};\r\n var points = [\r\n {x: startX - width/4, y: startY + height/4},\r\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\r\n {x: startX - width/4 + width, y: startY + height/4},\r\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\r\n {x: startX - width/4, y: startY + height/4}\r\n ];\r\n\r\n var symbol = drawPath(chart, start, points);\r\n\r\n symbol.attr({\r\n stroke: this.getAttr('element-color'),\r\n 'stroke-width': this.getAttr('line-width'),\r\n fill: this.getAttr('fill')\r\n });\r\n if (options.link) { symbol.attr('href', options.link); }\r\n if (options.target) { symbol.attr('target', options.target); }\r\n if (options.key) { symbol.node.id = options.key; }\r\n symbol.node.setAttribute('class', this.getAttr('class'));\r\n\r\n this.text.attr({\r\n y: symbol.getBBox().height/2\r\n });\r\n\r\n this.group.push(symbol);\r\n symbol.insertBefore(this.text);\r\n\r\n this.initialize();\r\n}\r\ninherits(Condition, Symbol);\r\n\r\nCondition.prototype.render = function() {\r\n\r\n if (this.yes_direction) {\r\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\r\n }\r\n\r\n if (this.no_direction) {\r\n this[this.no_direction + '_symbol'] = this.no_symbol;\r\n }\r\n\r\n var lineLength = this.getAttr('line-length');\r\n\r\n if (this.bottom_symbol) {\r\n var bottomPoint = this.getBottom();\r\n\r\n if (!this.bottom_symbol.isPositioned) {\r\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\r\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\r\n this.bottom_symbol.isPositioned = true;\r\n\r\n this.bottom_symbol.render();\r\n }\r\n }\r\n\r\n if (this.right_symbol) {\r\n var rightPoint = this.getRight();\r\n\r\n if (!this.right_symbol.isPositioned) {\r\n\r\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\r\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\r\n var self = this;\r\n (function shift() {\r\n var hasSymbolUnder = false;\r\n var symb;\r\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n symb = self.chart.symbols[i];\r\n\r\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \r\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\r\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\r\n hasSymbolUnder = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (hasSymbolUnder) {\r\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\r\n shift();\r\n }\r\n })();\r\n\r\n this.right_symbol.isPositioned = true;\r\n\r\n this.right_symbol.render();\r\n }\r\n }\r\n};\r\n\r\nCondition.prototype.renderLines = function() {\r\n if (this.yes_symbol) {\r\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\r\n }\r\n\r\n if (this.no_symbol) {\r\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\r\n }\r\n};\r\n\r\nmodule.exports = Condition;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Raphael = require('raphael');\r\nvar defaults = require('./flowchart.helpers').defaults;\r\nvar defaultOptions = require('./flowchart.defaults');\r\nvar Condition = require('./flowchart.symbol.condition');\r\n\r\nfunction FlowChart(container, options) {\r\n options = options || {};\r\n\r\n this.paper = new Raphael(container);\r\n\r\n this.options = defaults(options, defaultOptions);\r\n\r\n this.symbols = [];\r\n this.lines = [];\r\n this.start = null;\r\n}\r\n\r\nFlowChart.prototype.handle = function(symbol) {\r\n if (this.symbols.indexOf(symbol) <= -1) {\r\n this.symbols.push(symbol);\r\n }\r\n\r\n var flowChart = this;\r\n\r\n if (symbol instanceof(Condition)) {\r\n symbol.yes = function(nextSymbol) {\r\n symbol.yes_symbol = nextSymbol;\r\n if(symbol.no_symbol) {\r\n symbol.pathOk = true;\r\n }\r\n return flowChart.handle(nextSymbol);\r\n };\r\n symbol.no = function(nextSymbol) {\r\n symbol.no_symbol = nextSymbol;\r\n if(symbol.yes_symbol) {\r\n symbol.pathOk = true;\r\n }\r\n return flowChart.handle(nextSymbol);\r\n };\r\n } else {\r\n symbol.then = function(nextSymbol) {\r\n symbol.next = nextSymbol;\r\n symbol.pathOk = true;\r\n return flowChart.handle(nextSymbol);\r\n };\r\n }\r\n\r\n return symbol;\r\n};\r\n\r\nFlowChart.prototype.startWith = function(symbol) {\r\n this.start = symbol;\r\n return this.handle(symbol);\r\n};\r\n\r\nFlowChart.prototype.render = function() {\r\n var maxWidth = 0,\r\n maxHeight = 0,\r\n i = 0,\r\n len = 0,\r\n maxX = 0,\r\n maxY = 0,\r\n minX = 0,\r\n minY = 0,\r\n symbol,\r\n line;\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n if (symbol.width > maxWidth) {\r\n maxWidth = symbol.width;\r\n }\r\n if (symbol.height > maxHeight) {\r\n maxHeight = symbol.height;\r\n }\r\n }\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\r\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\r\n }\r\n\r\n this.start.render();\r\n // for (i = 0, len = this.symbols.length; i < len; i++) {\r\n // symbol = this.symbols[i];\r\n // symbol.render();\r\n // }\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n symbol.renderLines();\r\n }\r\n\r\n maxX = this.maxXFromLine;\r\n\r\n var x;\r\n var y;\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n x = symbol.getX() + symbol.width;\r\n y = symbol.getY() + symbol.height;\r\n if (x > maxX) {\r\n maxX = x;\r\n }\r\n if (y > maxY) {\r\n maxY = y;\r\n }\r\n }\r\n\r\n for (i = 0, len = this.lines.length; i < len; i++) {\r\n line = this.lines[i].getBBox();\r\n x = line.x;\r\n y = line.y;\r\n var x2 = line.x2;\r\n var y2 = line.y2;\r\n if (x < minX) {\r\n minX = x;\r\n }\r\n if (y < minY) {\r\n minY = y;\r\n }\r\n if (x2 > maxX) {\r\n maxX = x2;\r\n }\r\n if (y2 > maxY) {\r\n maxY = y2;\r\n }\r\n }\r\n\r\n var scale = this.options['scale'];\r\n var lineWidth = this.options['line-width'];\r\n\r\n if (minX < 0) minX -= lineWidth;\r\n if (minY < 0) minY -= lineWidth;\r\n\r\n var width = maxX + lineWidth - minX;\r\n var height = maxY + lineWidth - minY;\r\n\r\n this.paper.setSize(width * scale, height * scale);\r\n this.paper.setViewBox(minX, minY, width, height, true);\r\n};\r\n\r\nFlowChart.prototype.clean = function() {\r\n if (this.paper) {\r\n var paperDom = this.paper.canvas;\r\n paperDom.parentNode.removeChild(paperDom);\r\n }\r\n};\r\n\r\nmodule.exports = FlowChart;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 6\n// module chunks = 0","// defaults\r\nmodule.exports = {\r\n 'x': 0,\r\n 'y': 0,\r\n 'line-width': 3,\r\n 'line-length': 50,\r\n 'text-margin': 10,\r\n 'font-size': 14,\r\n 'font-color': 'black',\r\n // 'font': 'normal',\r\n // 'font-family': 'calibri',\r\n // 'font-weight': 'normal',\r\n 'line-color': 'black',\r\n 'element-color': 'black',\r\n 'fill': 'white',\r\n 'yes-text': 'yes',\r\n 'no-text': 'no',\r\n 'arrow-end': 'block',\r\n 'class': 'flowchart',\r\n 'scale': 1,\r\n 'symbols': {\r\n 'start': {},\r\n 'end': {},\r\n 'condition': {},\r\n 'inputoutput': {},\r\n 'operation': {},\r\n 'subroutine': {}\r\n }//,\r\n // 'flowstate' : {\r\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\r\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\r\n // 'future' : { 'fill': '#FFFF99'},\r\n // 'invalid': {'fill': '#444444'}\r\n // }\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 7\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\r\nif (!Array.prototype.indexOf) {\r\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\r\n \"use strict\";\r\n if (this === null) {\r\n throw new TypeError();\r\n }\r\n var t = Object(this);\r\n var len = t.length >>> 0;\r\n if (len === 0) {\r\n return -1;\r\n }\r\n var n = 0;\r\n if (arguments.length > 0) {\r\n n = Number(arguments[1]);\r\n if (n != n) { // shortcut for verifying if it's NaN\r\n n = 0;\r\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\r\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n }\r\n }\r\n if (n >= len) {\r\n return -1;\r\n }\r\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\r\n for (; k < len; k++) {\r\n if (k in t && t[k] === searchElement) {\r\n return k;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\n\r\n// add lastIndexOf to non ECMA-262 standard compliant browsers\r\nif (!Array.prototype.lastIndexOf) {\r\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\r\n \"use strict\";\r\n if (this === null) {\r\n throw new TypeError();\r\n }\r\n var t = Object(this);\r\n var len = t.length >>> 0;\r\n if (len === 0) {\r\n return -1;\r\n }\r\n var n = len;\r\n if (arguments.length > 1) {\r\n n = Number(arguments[1]);\r\n if (n != n) {\r\n n = 0;\r\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\r\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n }\r\n }\r\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\r\n for (; k >= 0; k--) {\r\n if (k in t && t[k] === searchElement) {\r\n return k;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\n\r\nif (!String.prototype.trim) {\r\n String.prototype.trim = function() {\r\n return this.replace(/^\\s+|\\s+$/g, '');\r\n };\r\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 8\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction End(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n options = options || {};\r\n options.text = options.text || 'End';\r\n Symbol.call(this, chart, options, symbol);\r\n}\r\ninherits(End, Symbol);\r\n\r\nmodule.exports = End;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\nvar drawAPI = require('./flowchart.functions');\r\nvar drawPath = drawAPI.drawPath;\r\n\r\nfunction InputOutput(chart, options) {\r\n options = options || {};\r\n Symbol.call(this, chart, options);\r\n this.textMargin = this.getAttr('text-margin');\r\n\r\n this.text.attr({\r\n x: this.textMargin * 3\r\n });\r\n\r\n var width = this.text.getBBox().width + 4 * this.textMargin;\r\n var height = this.text.getBBox().height + 2 * this.textMargin;\r\n var startX = this.textMargin;\r\n var startY = height/2;\r\n\r\n var start = {x: startX, y: startY};\r\n var points = [\r\n {x: startX - this.textMargin, y: height},\r\n {x: startX - this.textMargin + width, y: height},\r\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\r\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\r\n {x: startX, y: startY}\r\n ];\r\n\r\n var symbol = drawPath(chart, start, points);\r\n\r\n symbol.attr({\r\n stroke: this.getAttr('element-color'),\r\n 'stroke-width': this.getAttr('line-width'),\r\n fill: this.getAttr('fill')\r\n });\r\n if (options.link) { symbol.attr('href', options.link); }\r\n if (options.target) { symbol.attr('target', options.target); }\r\n if (options.key) { symbol.node.id = options.key; }\r\n symbol.node.setAttribute('class', this.getAttr('class'));\r\n\r\n this.text.attr({\r\n y: symbol.getBBox().height/2\r\n });\r\n\r\n this.group.push(symbol);\r\n symbol.insertBefore(this.text);\r\n\r\n this.initialize();\r\n}\r\ninherits(InputOutput, Symbol);\r\n\r\nInputOutput.prototype.getLeft = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX() + this.textMargin;\r\n return {x: x, y: y};\r\n};\r\n\r\nInputOutput.prototype.getRight = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\r\n return {x: x, y: y};\r\n};\r\n\r\nmodule.exports = InputOutput;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction Operation(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0);\r\n options = options || {};\r\n Symbol.call(this, chart, options, symbol);\r\n}\r\ninherits(Operation, Symbol);\r\n\r\nmodule.exports = Operation;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction Start(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n options = options || {};\r\n options.text = options.text || 'Start';\r\n Symbol.call(this, chart, options, symbol);\r\n}\r\ninherits(Start, Symbol);\r\n\r\nmodule.exports = Start;\r\n\r\n// Start.prototype.render = function() {\r\n// if (this.next) {\r\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\r\n\r\n// var bottomPoint = this.getBottom();\r\n// var topPoint = this.next.getTop();\r\n\r\n// if (!this.next.isPositioned) {\r\n// this.next.shiftY(this.getY() + this.height + lineLength);\r\n// this.next.setX(bottomPoint.x - this.next.width/2);\r\n// this.next.isPositioned = true;\r\n\r\n// this.next.render();\r\n// }\r\n// }\r\n// };\r\n\r\n// Start.prototype.renderLines = function() {\r\n// if (this.next) {\r\n// this.drawLineTo(this.next);\r\n// }\r\n// };\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction Subroutine(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0);\r\n options = options || {};\r\n Symbol.call(this, chart, options, symbol);\r\n\r\n symbol.attr({\r\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\r\n });\r\n\r\n this.text.attr({\r\n 'x': 2 * this.getAttr('text-margin')\r\n });\r\n\r\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\r\n innerWrap.attr({\r\n x: this.getAttr('text-margin'),\r\n stroke: this.getAttr('element-color'),\r\n 'stroke-width': this.getAttr('line-width'),\r\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\r\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\r\n fill: this.getAttr('fill')\r\n });\r\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\r\n\r\n var font = this.getAttr('font');\r\n var fontF = this.getAttr('font-family');\r\n var fontW = this.getAttr('font-weight');\r\n\r\n if (font) innerWrap.attr({ 'font': font });\r\n if (fontF) innerWrap.attr({ 'font-family': fontF });\r\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\r\n\r\n if (options.link) { innerWrap.attr('href', options.link); }\r\n if (options.target) { innerWrap.attr('target', options.target); }\r\n this.group.push(innerWrap);\r\n innerWrap.insertBefore(this.text);\r\n\r\n this.initialize();\r\n}\r\ninherits(Subroutine, Symbol);\r\n\r\nmodule.exports = Subroutine;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 13\n// module chunks = 0","if (typeof jQuery != 'undefined') {\r\n\tvar parse = require('./flowchart.parse');\r\n\t(function( $ ) {\r\n\t\t$.fn.flowChart = function( options ) {\r\n\t\t\treturn this.each(function() {\r\n\t\t\t\tvar $this = $(this);\r\n\t\t\t\tvar chart = parse($this.text());\r\n\t\t\t\t$this.html('');\r\n\t\t\t\tchart.drawSVG(this, options);\r\n\t\t\t});\r\n\t\t};\r\n\t})(jQuery); // eslint-disable-line\r\n}\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 14\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 15\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index e7507e37..fbb8e614 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -3,5 +3,5 @@ // Distributed under MIT license // http://adrai.github.io/flowchart.js -!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(8);var r=e(4);e(14);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),n=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),n&&this.text.attr({"font-weight":n}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var o=this.getAttr("maxWidth");if(o){for(var h=i.text.split(" "),a="",x=0,l=h.length;l>x;x++){var y=h[x];this.text.attr("text",a+" "+y),a+=this.text.getBBox().width>o?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*g,height:this.text.getBBox().height+2*g}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),n=s.drawLine,o=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function s(){for(var i,r=!1,n=0,o=e.chart.symbols.length;o>n;n++){i=e.chart.symbols[n];var h=Math.abs(i.getCenter().x-e.next.getCenter().x);if(i.getCenter().y>e.next.getCenter().y&&h<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),s())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,"",this.next_direction):this.drawLineTo(this.next))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),l=this.getLeft(),y=t.getCenter().x,g=t.getCenter().y,f=t.getTop(),p=t.getRight(),c=t.getLeft(),u=s===y,d=h===g,m=g>h,b=h>g||this===t,v=s>y,w=y>s,k=0,_=this.getAttr("line-length"),B=this.getAttr("line-width");if(e&&"bottom"!==e||!u||!m)if(e&&"right"!==e||!d||!w)if(e&&"left"!==e||!d||!v)if(e&&"right"!==e||!u||!b)if(e&&"right"!==e||!u||!m)if(e&&"bottom"!==e||!v)if(e&&"bottom"!==e||!w)if(e&&"right"===e&&v)r=n(this.chart,a,[{x:a.x+_/2,y:a.y},{x:a.x+_/2,y:f.y-_/2},{x:f.x,y:f.y-_/2},{x:f.x,y:f.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+_/2;else if(e&&"right"===e&&w)r=n(this.chart,a,[{x:f.x,y:a.y},{x:f.x,y:f.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+_/2;else if(e&&"bottom"===e&&u&&b)r=n(this.chart,x,[{x:x.x,y:x.y+_/2},{x:a.x+_/2,y:x.y+_/2},{x:a.x+_/2,y:f.y-_/2},{x:f.x,y:f.y-_/2},{x:f.x,y:f.y}],i),this.bottomStart=!0,t.topEnd=!0,k=x.x+_/2;else if("left"===e&&u&&b){var A=l.x-_/2;c.xO;O++)for(var M,X=this.chart.lines[O],S=X.attr("path"),T=r.attr("path"),Y=0,C=S.length-1;C>Y;Y++){var j=[];j.push(["M",S[Y][1],S[Y][2]]),j.push(["L",S[Y+1][1],S[Y+1][2]]);for(var E=j[0][1],z=j[0][2],P=j[1][1],R=j[1][2],F=0,I=T.length-1;I>F;F++){var N=[];N.push(["M",T[F][1],T[F][2]]),N.push(["L",T[F+1][1],T[F+1][2]]);var W=N[0][1],V=N[0][2],q=N[1][1],G=N[1][2],Q=o(E,z,P,R,W,V,q,G);if(Q.onLine1&&Q.onLine2){var J;V===G?W>q?(J=["L",Q.x+2*B,V],T.splice(F+1,0,J),J=["C",Q.x+2*B,V,Q.x,V-4*B,Q.x-2*B,V],T.splice(F+2,0,J),r.attr("path",T)):(J=["L",Q.x-2*B,V],T.splice(F+1,0,J),J=["C",Q.x-2*B,V,Q.x,V-4*B,Q.x+2*B,V],T.splice(F+2,0,J),r.attr("path",T)):V>G?(J=["L",W,Q.y+2*B],T.splice(F+1,0,J),J=["C",W,Q.y+2*B,W+4*B,Q.y,W,Q.y-2*B],T.splice(F+2,0,J),r.attr("path",T)):(J=["L",W,Q.y-2*B],T.splice(F+1,0,J),J=["C",W,Q.y-2*B,W+4*B,Q.y,W,Q.y+2*B],T.splice(F+2,0,J),r.attr("path",T)),F+=2,M+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,n="M{0},{1}";for(r=2,s=2*e.length+2;s>r;r+=2)n+=" L{"+r+"},{"+(r+1)+"}";var o=[i.x,i.y];for(r=0,s=e.length;s>r;r++)o.push(e[r].x),o.push(e[r].y);var h=t.paper.path(n,o);h.attr("stroke",t.options["element-color"]),h.attr("stroke-width",t.options["line-width"]);var a=t.options.font,x=t.options["font-family"],l=t.options["font-weight"];return a&&h.attr({font:a}),x&&h.attr({"font-family":x}),l&&h.attr({"font-weight":l}),h}function r(t,i,e,r){var s,n;"[object Array]"!==Object.prototype.toString.call(e)&&(e=[e]);var o="M{0},{1}";for(s=2,n=2*e.length+2;n>s;s+=2)o+=" L{"+s+"},{"+(s+1)+"}";var h=[i.x,i.y];for(s=0,n=e.length;n>s;s++)h.push(e[s].x),h.push(e[s].y);var a=t.paper.path(o,h);a.attr({stroke:t.options["line-color"],"stroke-width":t.options["line-width"],"arrow-end":t.options["arrow-end"]});var x=t.options.font,l=t.options["font-family"],y=t.options["font-weight"];if(x&&a.attr({font:x}),l&&a.attr({"font-family":l}),y&&a.attr({"font-weight":y}),r){var g=!1,f=t.paper.text(0,0,r),p=!1,c=e[0];i.y===c.y&&(p=!0);var u=0,d=0;g?(u=i.x>c.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"])),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),l&&f.attr({"font-family":l}),y&&f.attr({"font-weight":y})}return a}function s(t,i,e,r,s,n,o,h){var a,x,l,y,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-n)*(e-t)-(o-s)*(r-i),0===a?f:(x=i-n,l=t-s,y=(o-s)*x-(h-n)*l,g=(e-t)*x-(r-i)*l,x=y/a,l=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&1>x&&(f.onLine1=!0),l>0&&1>l&&(f.onLine2=!0),f)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?y.symbols[t.substring(0,i-1)]:y.symbols[t]}function r(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=C.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var y={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new n(y,t);break;case"end":g[t.key]=new o(y,t);break;case"operation":g[t.key]=new h(y,t);break;case"inputoutput":g[t.key]=new a(y,t);break;case"subroutine":g[t.key]=new x(y,t);break;case"condition":g[t.key]=new l(y,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var y=new s(t,i);this.diagram=y;var g={};!function f(t,i,s){var n=e(t);return r.start===t?y.startWith(n):i&&s&&!i.pathOk&&(i instanceof l?(s.yes===t&&i.yes(n),s.no===t&&i.no(n)):i.then(n)),n.pathOk?n:(n instanceof l?(t.yes&&f(t.yes,n,t),t.no&&f(t.no,n,t)):t.next&&f(t.next,n,t),n)}(this.start),y.render()},clean:function(){this.diagram.clean()}},g=[],f=0,p=1,c=t.length;c>p;p++)if("\n"===t[p]&&"\\"!==t[p-1]){var u=t.substring(f,p);f=p+1,g.push(u.replace(/\\\n/g,"\n"))}fd;){var b=g[d];b.indexOf("->")<0&&b.indexOf("=>")<0&&b.indexOf("@>")<0?(g[d-1]+="\n"+b,g.splice(d,1),m--):d++}for(;g.length>0;){var v=g.splice(0,1)[0].trim();if(v.indexOf("=>")>=0){var w=v.split("=>"),k={key:w[0].replace(/\(.*\)/,""),symbolType:w[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},_=w[0].match(/\((.*)\)/);if(_&&_.length>1)for(var B=_[1].split(","),A=0;A=0&&(L=k.symbolType.split(": "),k.symbolType=L.shift(),k.text=L.join(": ")),k.text&&k.text.indexOf(":>")>=0?(L=k.text.split(":>"),k.text=L.shift(),k.link=L.join(":>")):k.symbolType.indexOf(":>")>=0&&(L=k.symbolType.split(":>"),k.symbolType=L.shift(),k.link=L.join(":>")),k.symbolType.indexOf("\n")>=0&&(k.symbolType=k.symbolType.split("\n")[0]),k.link){var M=k.link.indexOf("[")+1,X=k.link.indexOf("]");M>=0&&X>=0&&(k.target=k.link.substring(M,X),k.link=k.link.substring(0,M-1))}if(k.text&&k.text.indexOf("|")>=0){var S=k.text.split("|");k.flowstate=S.pop().trim(),k.text=S.join("|")}y.symbols[k.key]=k}else if(v.indexOf("->")>=0)for(var T=v.split("->"),A=0,Y=T.length;Y>A;A++){var C=T[A],j=e(C),E=r(C),z=null;if(E.indexOf(",")>=0){var P=E.split(",");E=P[0],z=P[1].trim()}if(y.start||(y.start=j),Y>A+1){var R=T[A+1];j[E]=e(R),j["direction_"+E]=z,z=null}}else if(v.indexOf("@>")>=0)for(var F=v.split("@>"),A=0,Y=F.length;Y>A;A++)if(A+1!=Y){var I=e(F[A]),R=e(F[A+1]);I.lineStyle[R.key]=JSON.parse(i(F[A+1]))}}return y}var s=e(6),n=e(12),o=e(9),h=e(11),a=e(10),x=e(13),l=e(5);t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.yes_direction="bottom",this.no_direction="right",this.params=i.params,i.yes&&i.direction_yes&&i.no&&!i.direction_no?"right"===i.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):(this.no_direction="right",this.yes_direction="bottom"):i.yes&&!i.direction_yes&&i.no&&i.direction_no?"right"===i.direction_no?(this.yes_direction="bottom",this.no_direction="right"):(this.yes_direction="right",this.no_direction="bottom"):(this.yes_direction="bottom",this.no_direction="right"),this.yes_direction=this.yes_direction||"bottom",this.no_direction=this.no_direction||"right",this.text.attr({x:2*this.textMargin});var e=this.text.getBBox().width+3*this.textMargin;e+=e/2;var r=this.text.getBBox().height+2*this.textMargin;r+=r/2,r=Math.max(.5*e,r);var n=e/4,o=r/4;this.text.attr({x:n+this.textMargin/2});var a={x:n,y:o},x=[{x:n-e/4,y:o+r/4},{x:n-e/4+e/2,y:o+r/4+r/2},{x:n-e/4+e,y:o+r/4},{x:n-e/4+e/2,y:o+r/4-r/2},{x:n-e/4,y:o+r/4}],l=h(t,a,x);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits,o=e(3),h=o.drawPath;n(r,s),r.prototype.render=function(){this.yes_direction&&(this[this.yes_direction+"_symbol"]=this.yes_symbol),this.no_direction&&(this[this.no_direction+"_symbol"]=this.no_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.right_symbol){var e=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(e.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var r=this;!function s(){for(var i,e=!1,n=0,o=r.chart.symbols.length;o>n;n++)if(i=r.chart.symbols[n],!r.params["align-next"]||"no"!==r.params["align-next"]){var h=Math.abs(i.getCenter().x-r.right_symbol.getCenter().x);if(i.getCenter().y>r.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),s())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=n(i,o),this.symbols=[],this.lines=[],this.start=null}var s=e(15),n=e(1).defaults,o=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,n=0,o=0,h=0,a=0,x=0;for(s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],t.width>e&&(e=t.width),t.height>r&&(r=t.height);for(s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],t.shiftX(this.options.x+(e-t.width)/2+this.options["line-width"]),t.shiftY(this.options.y+(r-t.height)/2+this.options["line-width"]);for(this.start.render(),s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],t.renderLines();o=this.maxXFromLine;var l,y;for(s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],l=t.getX()+t.width,y=t.getY()+t.height,l>o&&(o=l),y>h&&(h=y);for(s=0,n=this.lines.length;n>s;s++){i=this.lines[s].getBBox(),l=i.x,y=i.y;var g=i.x2,f=i.y2;a>l&&(a=l),x>y&&(x=y),g>o&&(o=g),f>h&&(h=f)}var p=this.options.scale,c=this.options["line-width"];0>a&&(a-=c),0>x&&(x-=c);var u=o+c-a,d=h+c-x;this.paper.setSize(u*p,d*p),this.paper.setViewBox(a,x,u,d,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);e>s;s++)if(s in i&&i[s]===t)return s;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,n=this.textMargin,o=r/2,a={x:n,y:o},x=[{x:n-this.textMargin,y:r},{x:n-this.textMargin+e,y:r},{x:n-this.textMargin+e+2*this.textMargin,y:0},{x:n-this.textMargin+2*this.textMargin,y:0},{x:n,y:o}],l=h(t,a,x);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits,o=e(3),h=o.drawPath;n(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var n=this.getAttr("font"),o=this.getAttr("font-family"),h=this.getAttr("font-weight");n&&r.attr({font:n}),o&&r.attr({"font-family":o}),h&&r.attr({"font-weight":h}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); +!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(8);var r=e(4);e(14);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),n=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),n&&this.text.attr({"font-weight":n}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var o=this.getAttr("maxWidth");if(o){for(var h=i.text.split(" "),a="",x=0,l=h.length;xo?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*g,height:this.text.getBBox().height+2*g}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),n=s.drawLine,o=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function i(){for(var r,s=!1,n=0,o=e.chart.symbols.length;ne.next.getCenter().y&&h<=e.next.width/2){s=!0;break}}s&&(e.next.setX(r.getX()+r.width+t),i())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,"",this.next_direction):this.drawLineTo(this.next))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),l=this.getLeft(),y=t.getCenter().x,g=t.getCenter().y,f=t.getTop(),p=t.getRight(),c=t.getLeft(),u=s===y,d=h===g,m=hg||this===t,v=s>y,w=sq?(J=["L",Q.x+2*B,V],T.splice(F+1,0,J),J=["C",Q.x+2*B,V,Q.x,V-4*B,Q.x-2*B,V],T.splice(F+2,0,J),r.attr("path",T)):(J=["L",Q.x-2*B,V],T.splice(F+1,0,J),J=["C",Q.x-2*B,V,Q.x,V-4*B,Q.x+2*B,V],T.splice(F+2,0,J),r.attr("path",T)):V>G?(J=["L",W,Q.y+2*B],T.splice(F+1,0,J),J=["C",W,Q.y+2*B,W+4*B,Q.y,W,Q.y-2*B],T.splice(F+2,0,J),r.attr("path",T)):(J=["L",W,Q.y-2*B],T.splice(F+1,0,J),J=["C",W,Q.y-2*B,W+4*B,Q.y,W,Q.y+2*B],T.splice(F+2,0,J),r.attr("path",T)),F+=2,M+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,n="M{0},{1}";for(r=2,s=2*e.length+2;rc.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"])),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),l&&f.attr({"font-family":l}),y&&f.attr({"font-weight":y})}return a}function s(t,i,e,r,s,n,o,h){var a,x,l,y,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-n)*(e-t)-(o-s)*(r-i),0===a?f:(x=i-n,l=t-s,y=(o-s)*x-(h-n)*l,g=(e-t)*x-(r-i)*l,x=y/a,l=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&x<1&&(f.onLine1=!0),l>0&&l<1&&(f.onLine2=!0),f)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function r(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?g.symbols[t.substring(0,i-1)]:g.symbols[t]}function y(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=j.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var g={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new n(y,t);break;case"end":g[t.key]=new o(y,t);break;case"operation":g[t.key]=new h(y,t);break;case"inputoutput":g[t.key]=new a(y,t);break;case"subroutine":g[t.key]=new x(y,t);break;case"condition":g[t.key]=new l(y,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var y=new s(t,i);this.diagram=y;var g={};!function t(i,s,n){var o=e(i);return r.start===i?y.startWith(o):s&&n&&!s.pathOk&&(s instanceof l?(n.yes===i&&s.yes(o),n.no===i&&s.no(o)):s.then(o)),o.pathOk?o:(o instanceof l?(i.yes&&t(i.yes,o,i),i.no&&t(i.no,o,i)):i.next&&t(i.next,o,i),o)}(this.start),y.render()},clean:function(){this.diagram.clean()}},f=[],p=0,c=1,u=t.length;c")<0&&v.indexOf("=>")<0&&v.indexOf("@>")<0?(f[m-1]+="\n"+v,f.splice(m,1),b--):m++}for(;f.length>0;){var w=f.splice(0,1)[0].trim();if(w.indexOf("=>")>=0){var k=w.split("=>"),_={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},B=k[0].match(/\((.*)\)/);if(B&&B.length>1)for(var A=B[1].split(","),O=0;O=0&&(M=_.symbolType.split(": "),_.symbolType=M.shift(),_.text=M.join(": ")),_.text&&_.text.indexOf(":>")>=0?(M=_.text.split(":>"),_.text=M.shift(),_.link=M.join(":>")):_.symbolType.indexOf(":>")>=0&&(M=_.symbolType.split(":>"),_.symbolType=M.shift(),_.link=M.join(":>")),_.symbolType.indexOf("\n")>=0&&(_.symbolType=_.symbolType.split("\n")[0]),_.link){var X=_.link.indexOf("[")+1,S=_.link.indexOf("]");X>=0&&S>=0&&(_.target=_.link.substring(X,S),_.link=_.link.substring(0,X-1))}if(_.text&&_.text.indexOf("|")>=0){var T=_.text.split("|");_.flowstate=T.pop().trim(),_.text=T.join("|")}g.symbols[_.key]=_}else if(w.indexOf("->")>=0)for(var Y=w.split("->"),O=0,C=Y.length;O=0){var F=P.split(",");P=F[0],R=F[1].trim()}if(g.start||(g.start=z),O+1")>=0)for(var N=w.split("@>"),O=0,C=N.length;Or.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){s=!0;break}}s&&(r.right_symbol.setX(e.getX()+e.width+t),i())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=n(i,o),this.symbols=[],this.lines=[],this.start=null}var s=e(15),n=e(1).defaults,o=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,n=0,o=0,h=0,a=0,x=0;for(s=0,n=this.symbols.length;se&&(e=t.width),t.height>r&&(r=t.height);for(s=0,n=this.symbols.length;so&&(o=l),y>h&&(h=y);for(s=0,n=this.lines.length;so&&(o=g),f>h&&(h=f)}var p=this.options.scale,c=this.options["line-width"];a<0&&(a-=c),x<0&&(x-=c);var u=o+c-a,d=h+c-x;this.paper.setSize(u*p,d*p),this.paper.setViewBox(a,x,u,d,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block",class:"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);s>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,n=this.textMargin,o=r/2,a={x:n,y:o},x=[{x:n-this.textMargin,y:r},{x:n-this.textMargin+e,y:r},{x:n-this.textMargin+e+2*this.textMargin,y:0},{x:n-this.textMargin+2*this.textMargin,y:0},{x:n,y:o}],l=h(t,a,x);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits,o=e(3),h=o.drawPath;n(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var n=this.getAttr("font"),o=this.getAttr("font-family"),h=this.getAttr("font-weight");n&&r.attr({font:n}),o&&r.attr({"font-family":o}),h&&r.attr({"font-weight":h}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); //# sourceMappingURL=flowchart.min.js.map \ No newline at end of file diff --git a/release/flowchart.min.js.map b/release/flowchart.min.js.map index 3d8fbf04..b9ae32c5 100644 --- a/release/flowchart.min.js.map +++ b/release/flowchart.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 5318a20b8e2a20917239","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","params","match","entries","entry","sub","join","txtAndState","pop","flowSymbols","lenS","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t //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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && 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 getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t\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\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/***/ },\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 {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 5318a20b8e2a20917239\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n //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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.functions.js\n ** module id = 3\n ** module chunks = 0\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && 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 getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n\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\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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n 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 {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 56bd4e59d210a8507bce","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\r\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\r\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\r\n\t\r\n\tvar FlowChart = {\r\n\t\tparse: parse\r\n\t};\r\n\t\r\n\tif (typeof window !== 'undefined') {\r\n\t\twindow.flowchart = FlowChart;\r\n\t}\r\n\t\r\n\tmodule.exports = FlowChart;\r\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\r\n\t if (!options || typeof options === 'function') {\r\n\t return defaultOptions;\r\n\t }\r\n\t\r\n\t var merged = {};\r\n\t for (var attrname in defaultOptions) {\r\n\t merged[attrname] = defaultOptions[attrname];\r\n\t }\r\n\t\r\n\t for (attrname in options) {\r\n\t if (options[attrname]) {\r\n\t if (typeof merged[attrname] === 'object') {\r\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\r\n\t } else {\r\n\t merged[attrname] = options[attrname];\r\n\t }\r\n\t }\r\n\t }\r\n\t return merged;\r\n\t}\r\n\t\r\n\tfunction _inherits(ctor, superCtor) {\r\n\t if (typeof(Object.create) === 'function') {\r\n\t // implementation from standard node.js 'util' module\r\n\t ctor.super_ = superCtor;\r\n\t ctor.prototype = Object.create(superCtor.prototype, {\r\n\t constructor: {\r\n\t value: ctor,\r\n\t enumerable: false,\r\n\t writable: true,\r\n\t configurable: true\r\n\t }\r\n\t });\r\n\t } else {\r\n\t // old school shim for old browsers\r\n\t ctor.super_ = superCtor;\r\n\t var TempCtor = function () {};\r\n\t TempCtor.prototype = superCtor.prototype;\r\n\t ctor.prototype = new TempCtor();\r\n\t ctor.prototype.constructor = ctor;\r\n\t }\r\n\t}\r\n\t\r\n\t// move dependent functions to a container so that\r\n\t// they can be overriden easier in no jquery environment (node.js)\r\n\tmodule.exports = {\r\n\t defaults: _defaults,\r\n\t inherits: _inherits\r\n\t};\r\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);\r\n\tvar drawLine = drawAPI.drawLine;\r\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\r\n\t\r\n\tfunction Symbol(chart, options, symbol) {\r\n\t this.chart = chart;\r\n\t this.group = this.chart.paper.set();\r\n\t this.symbol = symbol;\r\n\t this.connectedTo = [];\r\n\t this.symbolType = options.symbolType;\r\n\t this.flowstate = (options.flowstate || 'future');\r\n\t this.lineStyle = (options.lineStyle || {});\r\n\t this.key = (options.key || '');\r\n\t\r\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\r\n\t\r\n\t this.text = this.chart.paper.text(0, 0, options.text);\r\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\r\n\t if (options.key) { this.text.node.id = options.key + 't'; }\r\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\r\n\t\r\n\t this.text.attr({\r\n\t 'text-anchor': 'start',\r\n\t 'x' : this.getAttr('text-margin'),\r\n\t 'fill' : this.getAttr('font-color'),\r\n\t 'font-size' : this.getAttr('font-size')\r\n\t });\r\n\t\r\n\t var font = this.getAttr('font');\r\n\t var fontF = this.getAttr('font-family');\r\n\t var fontW = this.getAttr('font-weight');\r\n\t\r\n\t if (font) this.text.attr({ 'font': font });\r\n\t if (fontF) this.text.attr({ 'font-family': fontF });\r\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\r\n\t\r\n\t if (options.link) { this.text.attr('href', options.link); }\r\n\t if (options.target) { this.text.attr('target', options.target); }\r\n\t\r\n\t var maxWidth = this.getAttr('maxWidth');\r\n\t if (maxWidth) {\r\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\r\n\t var words = options.text.split(' ');\r\n\t var tempText = \"\";\r\n\t for (var i=0, ii=words.length; i maxWidth) {\r\n\t tempText += \"\\n\" + word;\r\n\t } else {\r\n\t tempText += \" \" + word;\r\n\t }\r\n\t }\r\n\t this.text.attr(\"text\", tempText.substring(1));\r\n\t }\r\n\t\r\n\t this.group.push(this.text);\r\n\t\r\n\t if (symbol) {\r\n\t var tmpMargin = this.getAttr('text-margin');\r\n\t\r\n\t symbol.attr({\r\n\t 'fill' : this.getAttr('fill'),\r\n\t 'stroke' : this.getAttr('element-color'),\r\n\t 'stroke-width' : this.getAttr('line-width'),\r\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\r\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\r\n\t });\r\n\t\r\n\t symbol.node.setAttribute('class', this.getAttr('class'));\r\n\t\r\n\t if (options.link) { symbol.attr('href', options.link); }\r\n\t if (options.target) { symbol.attr('target', options.target); }\r\n\t if (options.key) { symbol.node.id = options.key; }\r\n\t\r\n\t this.group.push(symbol);\r\n\t symbol.insertBefore(this.text);\r\n\t\r\n\t this.text.attr({\r\n\t 'y': symbol.getBBox().height/2\r\n\t });\r\n\t\r\n\t this.initialize();\r\n\t }\r\n\t\r\n\t}\r\n\t\r\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\r\n\tSymbol.prototype.getAttr = function(attName) {\r\n\t if (!this.chart) {\r\n\t return undefined;\r\n\t }\r\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\r\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\r\n\t var opt1;\r\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\r\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\r\n\t }\r\n\t return (opt1 || opt2 || opt3);\r\n\t};\r\n\t\r\n\tSymbol.prototype.initialize = function() {\r\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\r\n\t\r\n\t this.width = this.group.getBBox().width;\r\n\t this.height = this.group.getBBox().height;\r\n\t};\r\n\t\r\n\tSymbol.prototype.getCenter = function() {\r\n\t return {x: this.getX() + this.width/2,\r\n\t y: this.getY() + this.height/2};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getX = function() {\r\n\t return this.group.getBBox().x;\r\n\t};\r\n\t\r\n\tSymbol.prototype.getY = function() {\r\n\t return this.group.getBBox().y;\r\n\t};\r\n\t\r\n\tSymbol.prototype.shiftX = function(x) {\r\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\r\n\t};\r\n\t\r\n\tSymbol.prototype.setX = function(x) {\r\n\t this.group.transform('t' + x + ',' + this.getY());\r\n\t};\r\n\t\r\n\tSymbol.prototype.shiftY = function(y) {\r\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\r\n\t};\r\n\t\r\n\tSymbol.prototype.setY = function(y) {\r\n\t this.group.transform('t' + this.getX() + ',' + y);\r\n\t};\r\n\t\r\n\tSymbol.prototype.getTop = function() {\r\n\t var y = this.getY();\r\n\t var x = this.getX() + this.width/2;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getBottom = function() {\r\n\t var y = this.getY() + this.height;\r\n\t var x = this.getX() + this.width/2;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getLeft = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX();\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getRight = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX() + this.group.getBBox().width;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.render = function() {\r\n\t if (this.next) {\r\n\t\r\n\t var lineLength = this.getAttr('line-length');\r\n\t\r\n\t if (this.next_direction === 'right') {\r\n\t\r\n\t var rightPoint = this.getRight();\r\n\t\r\n\t if (!this.next.isPositioned) {\r\n\t\r\n\t this.next.setY(rightPoint.y - this.next.height/2);\r\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\t\r\n\t var self = this;\r\n\t (function shift() {\r\n\t var hasSymbolUnder = false;\r\n\t var symb;\r\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n\t symb = self.chart.symbols[i];\r\n\t\r\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\r\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\r\n\t hasSymbolUnder = true;\r\n\t break;\r\n\t }\r\n\t }\r\n\t\r\n\t if (hasSymbolUnder) {\r\n\t self.next.setX(symb.getX() + symb.width + lineLength);\r\n\t shift();\r\n\t }\r\n\t })();\r\n\t\r\n\t this.next.isPositioned = true;\r\n\t\r\n\t this.next.render();\r\n\t }\r\n\t } else {\r\n\t var bottomPoint = this.getBottom();\r\n\t\r\n\t if (!this.next.isPositioned) {\r\n\t this.next.shiftY(this.getY() + this.height + lineLength);\r\n\t this.next.setX(bottomPoint.x - this.next.width/2);\r\n\t this.next.isPositioned = true;\r\n\t\r\n\t this.next.render();\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\t\r\n\tSymbol.prototype.renderLines = function() {\r\n\t if (this.next) {\r\n\t if (this.next_direction) {\r\n\t this.drawLineTo(this.next, '', this.next_direction);\r\n\t } else {\r\n\t this.drawLineTo(this.next);\r\n\t }\r\n\t }\r\n\t};\r\n\t\r\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\r\n\t if (this.connectedTo.indexOf(symbol) < 0) {\r\n\t this.connectedTo.push(symbol);\r\n\t }\r\n\t\r\n\t var x = this.getCenter().x,\r\n\t y = this.getCenter().y,\r\n\t right = this.getRight(),\r\n\t bottom = this.getBottom(),\r\n\t left = this.getLeft();\r\n\t\r\n\t var symbolX = symbol.getCenter().x,\r\n\t symbolY = symbol.getCenter().y,\r\n\t symbolTop = symbol.getTop(),\r\n\t symbolRight = symbol.getRight(),\r\n\t symbolLeft = symbol.getLeft();\r\n\t\r\n\t var isOnSameColumn = x === symbolX,\r\n\t isOnSameLine = y === symbolY,\r\n\t isUnder = y < symbolY,\r\n\t isUpper = y > symbolY || this === symbol,\r\n\t isLeft = x > symbolX,\r\n\t isRight = x < symbolX;\r\n\t\r\n\t var maxX = 0,\r\n\t line,\r\n\t lineLength = this.getAttr('line-length'),\r\n\t lineWith = this.getAttr('line-width');\r\n\t\r\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\r\n\t line = drawLine(this.chart, bottom, symbolTop, text);\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x;\r\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\r\n\t line = drawLine(this.chart, right, symbolLeft, text);\r\n\t this.rightStart = true;\r\n\t symbol.leftEnd = true;\r\n\t maxX = symbolLeft.x;\r\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\r\n\t line = drawLine(this.chart, left, symbolRight, text);\r\n\t this.leftStart = true;\r\n\t symbol.rightEnd = true;\r\n\t maxX = symbolRight.x;\r\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: right.x + lineLength/2, y: right.y},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: right.x + lineLength/2, y: right.y},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\r\n\t if (this.leftEnd && isUpper) {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t } else {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t }\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n\t } else if ((!origin || origin === 'bottom') && isRight) {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n\t } else if ((origin && origin === 'right') && isLeft) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: right.x + lineLength/2, y: right.y},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((origin && origin === 'right') && isRight) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: symbolTop.x, y: right.y},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: bottom.y + lineLength/2},\r\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x + lineLength/2;\r\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\r\n\t var diffX = left.x - lineLength/2;\r\n\t if (symbolLeft.x < left.x) {\r\n\t diffX = symbolLeft.x - lineLength/2;\r\n\t }\r\n\t line = drawLine(this.chart, left, [\r\n\t {x: diffX, y: left.y},\r\n\t {x: diffX, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.leftStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = left.x;\r\n\t } else if ((origin === 'left')) {\r\n\t line = drawLine(this.chart, left, [\r\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\r\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.leftStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = left.x;\r\n\t }\r\n\t\r\n\t //update line style\r\n\t if (this.lineStyle[symbol.key] && line){\r\n\t line.attr( this.lineStyle[symbol.key]);\r\n\t }\r\n\t\r\n\t if (line) {\r\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\r\n\t var otherLine = this.chart.lines[l];\r\n\t var len;\r\n\t\r\n\t var ePath = otherLine.attr('path'),\r\n\t lPath = line.attr('path');\r\n\t\r\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\r\n\t var newPath = [];\r\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\r\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\r\n\t\r\n\t var line1_from_x = newPath[0][1];\r\n\t var line1_from_y = newPath[0][2];\r\n\t var line1_to_x = newPath[1][1];\r\n\t var line1_to_y = newPath[1][2];\r\n\t\r\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\r\n\t var newLinePath = [];\r\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\r\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\r\n\t\r\n\t var line2_from_x = newLinePath[0][1];\r\n\t var line2_from_y = newLinePath[0][2];\r\n\t var line2_to_x = newLinePath[1][1];\r\n\t var line2_to_y = newLinePath[1][2];\r\n\t\r\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);\r\n\t if (res.onLine1 && res.onLine2) {\r\n\t\r\n\t var newSegment;\r\n\t if (line2_from_y === line2_to_y) {\r\n\t if (line2_from_x > line2_to_x) {\r\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t } else {\r\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t }\r\n\t } else {\r\n\t if (line2_from_y > line2_to_y) {\r\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t } else {\r\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t }\r\n\t }\r\n\t\r\n\t lP += 2;\r\n\t len += 2;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t this.chart.lines.push(line);\r\n\t }\r\n\t\r\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\r\n\t this.chart.maxXFromLine = maxX;\r\n\t }\r\n\t};\r\n\t\r\n\tmodule.exports = Symbol;\r\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\r\n\t var i, len;\r\n\t var path = 'M{0},{1}';\r\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\r\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\r\n\t }\r\n\t var pathValues = [location.x, location.y];\r\n\t for (i = 0, len = points.length; i < len; i++) {\r\n\t pathValues.push(points[i].x);\r\n\t pathValues.push(points[i].y);\r\n\t }\r\n\t var symbol = chart.paper.path(path, pathValues);\r\n\t symbol.attr('stroke', chart.options['element-color']);\r\n\t symbol.attr('stroke-width', chart.options['line-width']);\r\n\t\r\n\t var font = chart.options.font;\r\n\t var fontF = chart.options['font-family'];\r\n\t var fontW = chart.options['font-weight'];\r\n\t\r\n\t if (font) symbol.attr({ 'font': font });\r\n\t if (fontF) symbol.attr({ 'font-family': fontF });\r\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\r\n\t\r\n\t return symbol;\r\n\t}\r\n\t\r\n\tfunction drawLine(chart, from, to, text) {\r\n\t var i, len;\r\n\t\r\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\r\n\t to = [to];\r\n\t }\r\n\t\r\n\t var path = 'M{0},{1}';\r\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\r\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\r\n\t }\r\n\t var pathValues = [from.x, from.y];\r\n\t for (i = 0, len = to.length; i < len; i++) {\r\n\t pathValues.push(to[i].x);\r\n\t pathValues.push(to[i].y);\r\n\t }\r\n\t\r\n\t var line = chart.paper.path(path, pathValues);\r\n\t line.attr({\r\n\t stroke: chart.options['line-color'],\r\n\t 'stroke-width': chart.options['line-width'],\r\n\t 'arrow-end': chart.options['arrow-end']\r\n\t });\r\n\t\r\n\t var font = chart.options.font;\r\n\t var fontF = chart.options['font-family'];\r\n\t var fontW = chart.options['font-weight'];\r\n\t\r\n\t if (font) line.attr({ 'font': font });\r\n\t if (fontF) line.attr({ 'font-family': fontF });\r\n\t if (fontW) line.attr({ 'font-weight': fontW });\r\n\t\r\n\t if (text) {\r\n\t\r\n\t var centerText = false;\r\n\t\r\n\t var textPath = chart.paper.text(0, 0, text);\r\n\t\r\n\t var isHorizontal = false;\r\n\t var firstTo = to[0];\r\n\t\r\n\t if (from.y === firstTo.y) {\r\n\t isHorizontal = true;\r\n\t }\r\n\t\r\n\t var x = 0,\r\n\t y = 0;\r\n\t\r\n\t if (centerText) {\r\n\t if (from.x > firstTo.x) {\r\n\t x = from.x - (from.x - firstTo.x)/2;\r\n\t } else {\r\n\t x = firstTo.x - (firstTo.x - from.x)/2;\r\n\t }\r\n\t\r\n\t if (from.y > firstTo.y) {\r\n\t y = from.y - (from.y - firstTo.y)/2;\r\n\t } else {\r\n\t y = firstTo.y - (firstTo.y - from.y)/2;\r\n\t }\r\n\t\r\n\t if (isHorizontal) {\r\n\t x -= textPath.getBBox().width/2;\r\n\t y -= chart.options['text-margin'];\r\n\t } else {\r\n\t x += chart.options['text-margin'];\r\n\t y -= textPath.getBBox().height/2;\r\n\t }\r\n\t } else {\r\n\t x = from.x;\r\n\t y = from.y;\r\n\t\r\n\t if (isHorizontal) {\r\n\t x += chart.options['text-margin']/2;\r\n\t y -= chart.options['text-margin'];\r\n\t } else {\r\n\t x += chart.options['text-margin']/2;\r\n\t y += chart.options['text-margin'];\r\n\t }\r\n\t }\r\n\t\r\n\t textPath.attr({\r\n\t 'text-anchor': 'start',\r\n\t 'font-size': chart.options['font-size'],\r\n\t 'fill': chart.options['font-color'],\r\n\t x: x,\r\n\t y: y\r\n\t });\r\n\t\r\n\t if (font) textPath.attr({ 'font': font });\r\n\t if (fontF) textPath.attr({ 'font-family': fontF });\r\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\r\n\t }\r\n\t\r\n\t return line;\r\n\t}\r\n\t\r\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\r\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\r\n\t var denominator, a, b, numerator1, numerator2, result = {\r\n\t x: null,\r\n\t y: null,\r\n\t onLine1: false,\r\n\t onLine2: false\r\n\t };\r\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\r\n\t if (denominator === 0) {\r\n\t return result;\r\n\t }\r\n\t a = line1StartY - line2StartY;\r\n\t b = line1StartX - line2StartX;\r\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\r\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\r\n\t a = numerator1 / denominator;\r\n\t b = numerator2 / denominator;\r\n\t\r\n\t // if we cast these lines infinitely in both directions, they intersect here:\r\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\r\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\r\n\t /*\r\n\t // it is worth noting that this should be the same as:\r\n\t x = line2StartX + (b * (line2EndX - line2StartX));\r\n\t y = line2StartX + (b * (line2EndY - line2StartY));\r\n\t */\r\n\t // if line1 is a segment and line2 is infinite, they intersect if:\r\n\t if (a > 0 && a < 1) {\r\n\t result.onLine1 = true;\r\n\t }\r\n\t // if line2 is a segment and line1 is infinite, they intersect if:\r\n\t if (b > 0 && b < 1) {\r\n\t result.onLine2 = true;\r\n\t }\r\n\t // if line1 and line2 are segments, they intersect if both of the above are true\r\n\t return result;\r\n\t}\r\n\t\r\n\tmodule.exports = {\r\n\t\tdrawPath: drawPath,\r\n\t\tdrawLine: drawLine,\r\n\t\tcheckLineIntersection: checkLineIntersection\r\n\t};\r\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\r\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\r\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\r\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\r\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\r\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\r\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\r\n\t\r\n\tfunction parse(input) {\r\n\t input = input || '';\r\n\t input = input.trim();\r\n\t\r\n\t var chart = {\r\n\t symbols: {},\r\n\t start: null,\r\n\t drawSVG: function(container, options) {\r\n\t var self = this;\r\n\t\r\n\t if (this.diagram) {\r\n\t this.diagram.clean();\r\n\t }\r\n\t\r\n\t var diagram = new FlowChart(container, options);\r\n\t this.diagram = diagram;\r\n\t var dispSymbols = {};\r\n\t\r\n\t function getDisplaySymbol(s) {\r\n\t if (dispSymbols[s.key]) {\r\n\t return dispSymbols[s.key];\r\n\t }\r\n\t\r\n\t switch (s.symbolType) {\r\n\t case 'start':\r\n\t dispSymbols[s.key] = new Start(diagram, s);\r\n\t break;\r\n\t case 'end':\r\n\t dispSymbols[s.key] = new End(diagram, s);\r\n\t break;\r\n\t case 'operation':\r\n\t dispSymbols[s.key] = new Operation(diagram, s);\r\n\t break;\r\n\t case 'inputoutput':\r\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \r\n\t break;\r\n\t case 'subroutine':\r\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\r\n\t break;\r\n\t case 'condition':\r\n\t dispSymbols[s.key] = new Condition(diagram, s);\r\n\t break;\r\n\t default:\r\n\t return new Error('Wrong symbol type!');\r\n\t }\r\n\t\r\n\t return dispSymbols[s.key];\r\n\t }\r\n\t\r\n\t (function constructChart(s, prevDisp, prev) {\r\n\t var dispSymb = getDisplaySymbol(s);\r\n\t\r\n\t if (self.start === s) {\r\n\t diagram.startWith(dispSymb);\r\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\r\n\t if (prevDisp instanceof(Condition)) {\r\n\t if (prev.yes === s) {\r\n\t prevDisp.yes(dispSymb);\r\n\t }\r\n\t if (prev.no === s) {\r\n\t prevDisp.no(dispSymb);\r\n\t }\r\n\t } else {\r\n\t prevDisp.then(dispSymb);\r\n\t }\r\n\t }\r\n\t\r\n\t if (dispSymb.pathOk) {\r\n\t return dispSymb;\r\n\t }\r\n\t\r\n\t if (dispSymb instanceof(Condition)) {\r\n\t if (s.yes) {\r\n\t constructChart(s.yes, dispSymb, s);\r\n\t }\r\n\t if (s.no) {\r\n\t constructChart(s.no, dispSymb, s);\r\n\t }\r\n\t } else if (s.next) {\r\n\t constructChart(s.next, dispSymb, s);\r\n\t }\r\n\t\r\n\t return dispSymb;\r\n\t })(this.start);\r\n\t\r\n\t diagram.render();\r\n\t },\r\n\t clean: function() {\r\n\t this.diagram.clean();\r\n\t }\r\n\t };\r\n\t\r\n\t var lines = [];\r\n\t var prevBreak = 0;\r\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\r\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\r\n\t var line0 = input.substring(prevBreak, i0);\r\n\t prevBreak = i0 + 1;\r\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\r\n\t }\r\n\t }\r\n\t\r\n\t if(prevBreak < input.length) {\r\n\t lines.push(input.substr(prevBreak));\r\n\t }\r\n\t\r\n\t for (var l = 1, len = lines.length; l < len;) {\r\n\t var currentLine = lines[l];\r\n\t\r\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\r\n\t lines[l - 1] += '\\n' + currentLine;\r\n\t lines.splice(l, 1);\r\n\t len--;\r\n\t } else {\r\n\t l++;\r\n\t }\r\n\t }\r\n\t\r\n\t function getStyle(s){\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t return s.substring(startIndex,endIndex);\r\n\t }\r\n\t return '{}';\r\n\t }\r\n\t\r\n\t function getSymbValue(s){\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t return s.substring(startIndex,endIndex);\r\n\t }\r\n\t return '';\r\n\t }\r\n\t\r\n\t function getSymbol(s) {\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \r\n\t }\r\n\t return chart.symbols[s];\r\n\t }\r\n\t\r\n\t function getNextPath(s) {\r\n\t var next = 'next';\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t next = flowSymb.substring(startIndex, endIndex);\r\n\t if (next.indexOf(',') < 0) {\r\n\t if (next !== 'yes' && next !== 'no') {\r\n\t next = 'next, ' + next;\r\n\t }\r\n\t }\r\n\t }\r\n\t return next;\r\n\t }\r\n\t\r\n\t while (lines.length > 0) {\r\n\t var line = lines.splice(0, 1)[0].trim();\r\n\t\r\n\t if (line.indexOf('=>') >= 0) {\r\n\t // definition\r\n\t var parts = line.split('=>');\r\n\t var symbol = {\r\n\t key: parts[0].replace(/\\(.*\\)/, ''),\r\n\t symbolType: parts[1],\r\n\t text: null,\r\n\t link: null,\r\n\t target: null,\r\n\t flowstate: null,\r\n\t lineStyle: {},\r\n\t params: {}\r\n\t };\r\n\t\r\n\t //parse parameters\r\n\t var params = parts[0].match(/\\((.*)\\)/);\r\n\t if (params && params.length > 1){\r\n\t var entries = params[1].split(',');\r\n\t for(var i = 0; i < entries.length; i++) {\r\n\t var entry = entries[0].split('=');\r\n\t if (entry.length == 2){\r\n\t symbol.params[entry[0]] = entry[1];\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t var sub;\r\n\t\r\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\r\n\t sub = symbol.symbolType.split(': ');\r\n\t symbol.symbolType = sub.shift();\r\n\t symbol.text = sub.join(': ');\r\n\t }\r\n\t\r\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\r\n\t sub = symbol.text.split(':>');\r\n\t symbol.text = sub.shift();\r\n\t symbol.link = sub.join(':>');\r\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\r\n\t sub = symbol.symbolType.split(':>');\r\n\t symbol.symbolType = sub.shift();\r\n\t symbol.link = sub.join(':>');\r\n\t }\r\n\t\r\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\r\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\r\n\t }\r\n\t\r\n\t /* adding support for links */\r\n\t if (symbol.link) {\r\n\t var startIndex = symbol.link.indexOf('[') + 1;\r\n\t var endIndex = symbol.link.indexOf(']');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\r\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\r\n\t }\r\n\t }\r\n\t /* end of link support */\r\n\t\r\n\t /* adding support for flowstates */\r\n\t if (symbol.text) {\r\n\t if (symbol.text.indexOf('|') >= 0) {\r\n\t var txtAndState = symbol.text.split('|');\r\n\t symbol.flowstate = txtAndState.pop().trim();\r\n\t symbol.text = txtAndState.join('|');\r\n\t }\r\n\t }\r\n\t /* end of flowstate support */\r\n\t\r\n\t chart.symbols[symbol.key] = symbol;\r\n\t\r\n\t } else if (line.indexOf('->') >= 0) {\r\n\t // flow\r\n\t var flowSymbols = line.split('->');\r\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\r\n\t var flowSymb = flowSymbols[i];\r\n\t var symbVal = getSymbValue(flowSymb);\r\n\t\r\n\t if (symbVal === 'true' || symbVal === 'false') {\r\n\t // map true or false to yes or no respectively\r\n\t flowSymb = flowSymb.replace('true', 'yes');\r\n\t flowSymb = flowSymb.replace('false', 'no');\r\n\t }\r\n\t\r\n\t var realSymb = getSymbol(flowSymb);\r\n\t var next = getNextPath(flowSymb);\r\n\t\r\n\t var direction = null;\r\n\t if (next.indexOf(',') >= 0) {\r\n\t var condOpt = next.split(',');\r\n\t next = condOpt[0];\r\n\t direction = condOpt[1].trim();\r\n\t }\r\n\t\r\n\t if (!chart.start) {\r\n\t chart.start = realSymb;\r\n\t }\r\n\t\r\n\t if (i + 1 < lenS) {\r\n\t var nextSymb = flowSymbols[i + 1];\r\n\t realSymb[next] = getSymbol(nextSymb);\r\n\t realSymb['direction_' + next] = direction;\r\n\t direction = null;\r\n\t }\r\n\t }\r\n\t } else if (line.indexOf('@>') >= 0) {\r\n\t\r\n\t // line style\r\n\t var lineStyleSymbols = line.split('@>');\r\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\r\n\t\r\n\t if ((i+1) != lenS){\r\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\r\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\r\n\t\r\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i+1]));\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t }\r\n\t return chart;\r\n\t}\r\n\t\r\n\tmodule.exports = parse;\r\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\r\n\tvar drawPath = drawAPI.drawPath;\r\n\t\r\n\tfunction Condition(chart, options) {\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options);\r\n\t this.textMargin = this.getAttr('text-margin');\r\n\t this.yes_direction = 'bottom';\r\n\t this.no_direction = 'right';\r\n\t this.params = options.params;\r\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\r\n\t if (options.direction_yes === 'right') {\r\n\t this.no_direction = 'bottom';\r\n\t this.yes_direction = 'right';\r\n\t } else {\r\n\t this.no_direction = 'right';\r\n\t this.yes_direction = 'bottom';\r\n\t }\r\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\r\n\t if (options.direction_no === 'right') {\r\n\t this.yes_direction = 'bottom';\r\n\t this.no_direction = 'right';\r\n\t } else {\r\n\t this.yes_direction = 'right';\r\n\t this.no_direction = 'bottom';\r\n\t }\r\n\t } else {\r\n\t this.yes_direction = 'bottom';\r\n\t this.no_direction = 'right';\r\n\t }\r\n\t\r\n\t this.yes_direction = this.yes_direction || 'bottom';\r\n\t this.no_direction = this.no_direction || 'right';\r\n\t\r\n\t this.text.attr({\r\n\t x: this.textMargin * 2\r\n\t });\r\n\t\r\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\r\n\t width += width/2;\r\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\r\n\t height += height/2;\r\n\t height = Math.max(width * 0.5, height);\r\n\t var startX = width/4;\r\n\t var startY = height/4;\r\n\t\r\n\t this.text.attr({\r\n\t x: startX + this.textMargin/2\r\n\t });\r\n\t\r\n\t var start = {x: startX, y: startY};\r\n\t var points = [\r\n\t {x: startX - width/4, y: startY + height/4},\r\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\r\n\t {x: startX - width/4 + width, y: startY + height/4},\r\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\r\n\t {x: startX - width/4, y: startY + height/4}\r\n\t ];\r\n\t\r\n\t var symbol = drawPath(chart, start, points);\r\n\t\r\n\t symbol.attr({\r\n\t stroke: this.getAttr('element-color'),\r\n\t 'stroke-width': this.getAttr('line-width'),\r\n\t fill: this.getAttr('fill')\r\n\t });\r\n\t if (options.link) { symbol.attr('href', options.link); }\r\n\t if (options.target) { symbol.attr('target', options.target); }\r\n\t if (options.key) { symbol.node.id = options.key; }\r\n\t symbol.node.setAttribute('class', this.getAttr('class'));\r\n\t\r\n\t this.text.attr({\r\n\t y: symbol.getBBox().height/2\r\n\t });\r\n\t\r\n\t this.group.push(symbol);\r\n\t symbol.insertBefore(this.text);\r\n\t\r\n\t this.initialize();\r\n\t}\r\n\tinherits(Condition, Symbol);\r\n\t\r\n\tCondition.prototype.render = function() {\r\n\t\r\n\t if (this.yes_direction) {\r\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\r\n\t }\r\n\t\r\n\t if (this.no_direction) {\r\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\r\n\t }\r\n\t\r\n\t var lineLength = this.getAttr('line-length');\r\n\t\r\n\t if (this.bottom_symbol) {\r\n\t var bottomPoint = this.getBottom();\r\n\t\r\n\t if (!this.bottom_symbol.isPositioned) {\r\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\r\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\r\n\t this.bottom_symbol.isPositioned = true;\r\n\t\r\n\t this.bottom_symbol.render();\r\n\t }\r\n\t }\r\n\t\r\n\t if (this.right_symbol) {\r\n\t var rightPoint = this.getRight();\r\n\t\r\n\t if (!this.right_symbol.isPositioned) {\r\n\t\r\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\r\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\t\r\n\t var self = this;\r\n\t (function shift() {\r\n\t var hasSymbolUnder = false;\r\n\t var symb;\r\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n\t symb = self.chart.symbols[i];\r\n\t\r\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \r\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\r\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\r\n\t hasSymbolUnder = true;\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t if (hasSymbolUnder) {\r\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\r\n\t shift();\r\n\t }\r\n\t })();\r\n\t\r\n\t this.right_symbol.isPositioned = true;\r\n\t\r\n\t this.right_symbol.render();\r\n\t }\r\n\t }\r\n\t};\r\n\t\r\n\tCondition.prototype.renderLines = function() {\r\n\t if (this.yes_symbol) {\r\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\r\n\t }\r\n\t\r\n\t if (this.no_symbol) {\r\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\r\n\t }\r\n\t};\r\n\t\r\n\tmodule.exports = Condition;\r\n\n\n/***/ }),\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\r\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\r\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\r\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\r\n\t\r\n\tfunction FlowChart(container, options) {\r\n\t options = options || {};\r\n\t\r\n\t this.paper = new Raphael(container);\r\n\t\r\n\t this.options = defaults(options, defaultOptions);\r\n\t\r\n\t this.symbols = [];\r\n\t this.lines = [];\r\n\t this.start = null;\r\n\t}\r\n\t\r\n\tFlowChart.prototype.handle = function(symbol) {\r\n\t if (this.symbols.indexOf(symbol) <= -1) {\r\n\t this.symbols.push(symbol);\r\n\t }\r\n\t\r\n\t var flowChart = this;\r\n\t\r\n\t if (symbol instanceof(Condition)) {\r\n\t symbol.yes = function(nextSymbol) {\r\n\t symbol.yes_symbol = nextSymbol;\r\n\t if(symbol.no_symbol) {\r\n\t symbol.pathOk = true;\r\n\t }\r\n\t return flowChart.handle(nextSymbol);\r\n\t };\r\n\t symbol.no = function(nextSymbol) {\r\n\t symbol.no_symbol = nextSymbol;\r\n\t if(symbol.yes_symbol) {\r\n\t symbol.pathOk = true;\r\n\t }\r\n\t return flowChart.handle(nextSymbol);\r\n\t };\r\n\t } else {\r\n\t symbol.then = function(nextSymbol) {\r\n\t symbol.next = nextSymbol;\r\n\t symbol.pathOk = true;\r\n\t return flowChart.handle(nextSymbol);\r\n\t };\r\n\t }\r\n\t\r\n\t return symbol;\r\n\t};\r\n\t\r\n\tFlowChart.prototype.startWith = function(symbol) {\r\n\t this.start = symbol;\r\n\t return this.handle(symbol);\r\n\t};\r\n\t\r\n\tFlowChart.prototype.render = function() {\r\n\t var maxWidth = 0,\r\n\t maxHeight = 0,\r\n\t i = 0,\r\n\t len = 0,\r\n\t maxX = 0,\r\n\t maxY = 0,\r\n\t minX = 0,\r\n\t minY = 0,\r\n\t symbol,\r\n\t line;\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t if (symbol.width > maxWidth) {\r\n\t maxWidth = symbol.width;\r\n\t }\r\n\t if (symbol.height > maxHeight) {\r\n\t maxHeight = symbol.height;\r\n\t }\r\n\t }\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\r\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\r\n\t }\r\n\t\r\n\t this.start.render();\r\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t // symbol = this.symbols[i];\r\n\t // symbol.render();\r\n\t // }\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t symbol.renderLines();\r\n\t }\r\n\t\r\n\t maxX = this.maxXFromLine;\r\n\t\r\n\t var x;\r\n\t var y;\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t x = symbol.getX() + symbol.width;\r\n\t y = symbol.getY() + symbol.height;\r\n\t if (x > maxX) {\r\n\t maxX = x;\r\n\t }\r\n\t if (y > maxY) {\r\n\t maxY = y;\r\n\t }\r\n\t }\r\n\t\r\n\t for (i = 0, len = this.lines.length; i < len; i++) {\r\n\t line = this.lines[i].getBBox();\r\n\t x = line.x;\r\n\t y = line.y;\r\n\t var x2 = line.x2;\r\n\t var y2 = line.y2;\r\n\t if (x < minX) {\r\n\t minX = x;\r\n\t }\r\n\t if (y < minY) {\r\n\t minY = y;\r\n\t }\r\n\t if (x2 > maxX) {\r\n\t maxX = x2;\r\n\t }\r\n\t if (y2 > maxY) {\r\n\t maxY = y2;\r\n\t }\r\n\t }\r\n\t\r\n\t var scale = this.options['scale'];\r\n\t var lineWidth = this.options['line-width'];\r\n\t\r\n\t if (minX < 0) minX -= lineWidth;\r\n\t if (minY < 0) minY -= lineWidth;\r\n\t\r\n\t var width = maxX + lineWidth - minX;\r\n\t var height = maxY + lineWidth - minY;\r\n\t\r\n\t this.paper.setSize(width * scale, height * scale);\r\n\t this.paper.setViewBox(minX, minY, width, height, true);\r\n\t};\r\n\t\r\n\tFlowChart.prototype.clean = function() {\r\n\t if (this.paper) {\r\n\t var paperDom = this.paper.canvas;\r\n\t paperDom.parentNode.removeChild(paperDom);\r\n\t }\r\n\t};\r\n\t\r\n\tmodule.exports = FlowChart;\r\n\n\n/***/ }),\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\r\n\tmodule.exports = {\r\n\t 'x': 0,\r\n\t 'y': 0,\r\n\t 'line-width': 3,\r\n\t 'line-length': 50,\r\n\t 'text-margin': 10,\r\n\t 'font-size': 14,\r\n\t 'font-color': 'black',\r\n\t // 'font': 'normal',\r\n\t // 'font-family': 'calibri',\r\n\t // 'font-weight': 'normal',\r\n\t 'line-color': 'black',\r\n\t 'element-color': 'black',\r\n\t 'fill': 'white',\r\n\t 'yes-text': 'yes',\r\n\t 'no-text': 'no',\r\n\t 'arrow-end': 'block',\r\n\t 'class': 'flowchart',\r\n\t 'scale': 1,\r\n\t 'symbols': {\r\n\t 'start': {},\r\n\t 'end': {},\r\n\t 'condition': {},\r\n\t 'inputoutput': {},\r\n\t 'operation': {},\r\n\t 'subroutine': {}\r\n\t }//,\r\n\t // 'flowstate' : {\r\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\r\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\r\n\t // 'future' : { 'fill': '#FFFF99'},\r\n\t // 'invalid': {'fill': '#444444'}\r\n\t // }\r\n\t};\r\n\n\n/***/ }),\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\r\n\tif (!Array.prototype.indexOf) {\r\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\r\n\t \"use strict\";\r\n\t if (this === null) {\r\n\t throw new TypeError();\r\n\t }\r\n\t var t = Object(this);\r\n\t var len = t.length >>> 0;\r\n\t if (len === 0) {\r\n\t return -1;\r\n\t }\r\n\t var n = 0;\r\n\t if (arguments.length > 0) {\r\n\t n = Number(arguments[1]);\r\n\t if (n != n) { // shortcut for verifying if it's NaN\r\n\t n = 0;\r\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\r\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n\t }\r\n\t }\r\n\t if (n >= len) {\r\n\t return -1;\r\n\t }\r\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\r\n\t for (; k < len; k++) {\r\n\t if (k in t && t[k] === searchElement) {\r\n\t return k;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\t\r\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\r\n\tif (!Array.prototype.lastIndexOf) {\r\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\r\n\t \"use strict\";\r\n\t if (this === null) {\r\n\t throw new TypeError();\r\n\t }\r\n\t var t = Object(this);\r\n\t var len = t.length >>> 0;\r\n\t if (len === 0) {\r\n\t return -1;\r\n\t }\r\n\t var n = len;\r\n\t if (arguments.length > 1) {\r\n\t n = Number(arguments[1]);\r\n\t if (n != n) {\r\n\t n = 0;\r\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\r\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n\t }\r\n\t }\r\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\r\n\t for (; k >= 0; k--) {\r\n\t if (k in t && t[k] === searchElement) {\r\n\t return k;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\t\r\n\tif (!String.prototype.trim) {\r\n\t String.prototype.trim = function() {\r\n\t return this.replace(/^\\s+|\\s+$/g, '');\r\n\t };\r\n\t}\n\n/***/ }),\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction End(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n\t options = options || {};\r\n\t options.text = options.text || 'End';\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t}\r\n\tinherits(End, Symbol);\r\n\t\r\n\tmodule.exports = End;\r\n\n\n/***/ }),\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\r\n\tvar drawPath = drawAPI.drawPath;\r\n\t\r\n\tfunction InputOutput(chart, options) {\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options);\r\n\t this.textMargin = this.getAttr('text-margin');\r\n\t\r\n\t this.text.attr({\r\n\t x: this.textMargin * 3\r\n\t });\r\n\t\r\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\r\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\r\n\t var startX = this.textMargin;\r\n\t var startY = height/2;\r\n\t\r\n\t var start = {x: startX, y: startY};\r\n\t var points = [\r\n\t {x: startX - this.textMargin, y: height},\r\n\t {x: startX - this.textMargin + width, y: height},\r\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\r\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\r\n\t {x: startX, y: startY}\r\n\t ];\r\n\t\r\n\t var symbol = drawPath(chart, start, points);\r\n\t\r\n\t symbol.attr({\r\n\t stroke: this.getAttr('element-color'),\r\n\t 'stroke-width': this.getAttr('line-width'),\r\n\t fill: this.getAttr('fill')\r\n\t });\r\n\t if (options.link) { symbol.attr('href', options.link); }\r\n\t if (options.target) { symbol.attr('target', options.target); }\r\n\t if (options.key) { symbol.node.id = options.key; }\r\n\t symbol.node.setAttribute('class', this.getAttr('class'));\r\n\t\r\n\t this.text.attr({\r\n\t y: symbol.getBBox().height/2\r\n\t });\r\n\t\r\n\t this.group.push(symbol);\r\n\t symbol.insertBefore(this.text);\r\n\t\r\n\t this.initialize();\r\n\t}\r\n\tinherits(InputOutput, Symbol);\r\n\t\r\n\tInputOutput.prototype.getLeft = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX() + this.textMargin;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tInputOutput.prototype.getRight = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tmodule.exports = InputOutput;\r\n\n\n/***/ }),\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction Operation(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t}\r\n\tinherits(Operation, Symbol);\r\n\t\r\n\tmodule.exports = Operation;\r\n\n\n/***/ }),\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction Start(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n\t options = options || {};\r\n\t options.text = options.text || 'Start';\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t}\r\n\tinherits(Start, Symbol);\r\n\t\r\n\tmodule.exports = Start;\r\n\t\r\n\t// Start.prototype.render = function() {\r\n\t// if (this.next) {\r\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\r\n\t\r\n\t// var bottomPoint = this.getBottom();\r\n\t// var topPoint = this.next.getTop();\r\n\t\r\n\t// if (!this.next.isPositioned) {\r\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\r\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\r\n\t// this.next.isPositioned = true;\r\n\t\r\n\t// this.next.render();\r\n\t// }\r\n\t// }\r\n\t// };\r\n\t\r\n\t// Start.prototype.renderLines = function() {\r\n\t// if (this.next) {\r\n\t// this.drawLineTo(this.next);\r\n\t// }\r\n\t// };\r\n\n\n/***/ }),\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction Subroutine(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t\r\n\t symbol.attr({\r\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\r\n\t });\r\n\t\r\n\t this.text.attr({\r\n\t 'x': 2 * this.getAttr('text-margin')\r\n\t });\r\n\t\r\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\r\n\t innerWrap.attr({\r\n\t x: this.getAttr('text-margin'),\r\n\t stroke: this.getAttr('element-color'),\r\n\t 'stroke-width': this.getAttr('line-width'),\r\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\r\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\r\n\t fill: this.getAttr('fill')\r\n\t });\r\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\r\n\t\r\n\t var font = this.getAttr('font');\r\n\t var fontF = this.getAttr('font-family');\r\n\t var fontW = this.getAttr('font-weight');\r\n\t\r\n\t if (font) innerWrap.attr({ 'font': font });\r\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\r\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\r\n\t\r\n\t if (options.link) { innerWrap.attr('href', options.link); }\r\n\t if (options.target) { innerWrap.attr('target', options.target); }\r\n\t this.group.push(innerWrap);\r\n\t innerWrap.insertBefore(this.text);\r\n\t\r\n\t this.initialize();\r\n\t}\r\n\tinherits(Subroutine, Symbol);\r\n\t\r\n\tmodule.exports = Subroutine;\r\n\n\n/***/ }),\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\r\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\r\n\t\t(function( $ ) {\r\n\t\t\t$.fn.flowChart = function( options ) {\r\n\t\t\t\treturn this.each(function() {\r\n\t\t\t\t\tvar $this = $(this);\r\n\t\t\t\t\tvar chart = parse($this.text());\r\n\t\t\t\t\t$this.html('');\r\n\t\t\t\t\tchart.drawSVG(this, options);\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t})(jQuery); // eslint-disable-line\r\n\t}\r\n\n\n/***/ }),\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \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 56bd4e59d210a8507bce","require('./src/flowchart.shim');\r\nvar parse = require('./src/flowchart.parse');\r\nrequire('./src/jquery-plugin');\r\n\r\nvar FlowChart = {\r\n\tparse: parse\r\n};\r\n\r\nif (typeof window !== 'undefined') {\r\n\twindow.flowchart = FlowChart;\r\n}\r\n\r\nmodule.exports = FlowChart;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\r\n if (!options || typeof options === 'function') {\r\n return defaultOptions;\r\n }\r\n\r\n var merged = {};\r\n for (var attrname in defaultOptions) {\r\n merged[attrname] = defaultOptions[attrname];\r\n }\r\n\r\n for (attrname in options) {\r\n if (options[attrname]) {\r\n if (typeof merged[attrname] === 'object') {\r\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\r\n } else {\r\n merged[attrname] = options[attrname];\r\n }\r\n }\r\n }\r\n return merged;\r\n}\r\n\r\nfunction _inherits(ctor, superCtor) {\r\n if (typeof(Object.create) === 'function') {\r\n // implementation from standard node.js 'util' module\r\n ctor.super_ = superCtor;\r\n ctor.prototype = Object.create(superCtor.prototype, {\r\n constructor: {\r\n value: ctor,\r\n enumerable: false,\r\n writable: true,\r\n configurable: true\r\n }\r\n });\r\n } else {\r\n // old school shim for old browsers\r\n ctor.super_ = superCtor;\r\n var TempCtor = function () {};\r\n TempCtor.prototype = superCtor.prototype;\r\n ctor.prototype = new TempCtor();\r\n ctor.prototype.constructor = ctor;\r\n }\r\n}\r\n\r\n// move dependent functions to a container so that\r\n// they can be overriden easier in no jquery environment (node.js)\r\nmodule.exports = {\r\n defaults: _defaults,\r\n inherits: _inherits\r\n};\r\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');\r\nvar drawLine = drawAPI.drawLine;\r\nvar checkLineIntersection = drawAPI.checkLineIntersection;\r\n\r\nfunction Symbol(chart, options, symbol) {\r\n this.chart = chart;\r\n this.group = this.chart.paper.set();\r\n this.symbol = symbol;\r\n this.connectedTo = [];\r\n this.symbolType = options.symbolType;\r\n this.flowstate = (options.flowstate || 'future');\r\n this.lineStyle = (options.lineStyle || {});\r\n this.key = (options.key || '');\r\n\r\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\r\n\r\n this.text = this.chart.paper.text(0, 0, options.text);\r\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\r\n if (options.key) { this.text.node.id = options.key + 't'; }\r\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\r\n\r\n this.text.attr({\r\n 'text-anchor': 'start',\r\n 'x' : this.getAttr('text-margin'),\r\n 'fill' : this.getAttr('font-color'),\r\n 'font-size' : this.getAttr('font-size')\r\n });\r\n\r\n var font = this.getAttr('font');\r\n var fontF = this.getAttr('font-family');\r\n var fontW = this.getAttr('font-weight');\r\n\r\n if (font) this.text.attr({ 'font': font });\r\n if (fontF) this.text.attr({ 'font-family': fontF });\r\n if (fontW) this.text.attr({ 'font-weight': fontW });\r\n\r\n if (options.link) { this.text.attr('href', options.link); }\r\n if (options.target) { this.text.attr('target', options.target); }\r\n\r\n var maxWidth = this.getAttr('maxWidth');\r\n if (maxWidth) {\r\n // using this approach: http://stackoverflow.com/a/3153457/22466\r\n var words = options.text.split(' ');\r\n var tempText = \"\";\r\n for (var i=0, ii=words.length; i maxWidth) {\r\n tempText += \"\\n\" + word;\r\n } else {\r\n tempText += \" \" + word;\r\n }\r\n }\r\n this.text.attr(\"text\", tempText.substring(1));\r\n }\r\n\r\n this.group.push(this.text);\r\n\r\n if (symbol) {\r\n var tmpMargin = this.getAttr('text-margin');\r\n\r\n symbol.attr({\r\n 'fill' : this.getAttr('fill'),\r\n 'stroke' : this.getAttr('element-color'),\r\n 'stroke-width' : this.getAttr('line-width'),\r\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\r\n 'height' : this.text.getBBox().height + 2 * tmpMargin\r\n });\r\n\r\n symbol.node.setAttribute('class', this.getAttr('class'));\r\n\r\n if (options.link) { symbol.attr('href', options.link); }\r\n if (options.target) { symbol.attr('target', options.target); }\r\n if (options.key) { symbol.node.id = options.key; }\r\n\r\n this.group.push(symbol);\r\n symbol.insertBefore(this.text);\r\n\r\n this.text.attr({\r\n 'y': symbol.getBBox().height/2\r\n });\r\n\r\n this.initialize();\r\n }\r\n\r\n}\r\n\r\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\r\nSymbol.prototype.getAttr = function(attName) {\r\n if (!this.chart) {\r\n return undefined;\r\n }\r\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\r\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\r\n var opt1;\r\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\r\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\r\n }\r\n return (opt1 || opt2 || opt3);\r\n};\r\n\r\nSymbol.prototype.initialize = function() {\r\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\r\n\r\n this.width = this.group.getBBox().width;\r\n this.height = this.group.getBBox().height;\r\n};\r\n\r\nSymbol.prototype.getCenter = function() {\r\n return {x: this.getX() + this.width/2,\r\n y: this.getY() + this.height/2};\r\n};\r\n\r\nSymbol.prototype.getX = function() {\r\n return this.group.getBBox().x;\r\n};\r\n\r\nSymbol.prototype.getY = function() {\r\n return this.group.getBBox().y;\r\n};\r\n\r\nSymbol.prototype.shiftX = function(x) {\r\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\r\n};\r\n\r\nSymbol.prototype.setX = function(x) {\r\n this.group.transform('t' + x + ',' + this.getY());\r\n};\r\n\r\nSymbol.prototype.shiftY = function(y) {\r\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\r\n};\r\n\r\nSymbol.prototype.setY = function(y) {\r\n this.group.transform('t' + this.getX() + ',' + y);\r\n};\r\n\r\nSymbol.prototype.getTop = function() {\r\n var y = this.getY();\r\n var x = this.getX() + this.width/2;\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.getBottom = function() {\r\n var y = this.getY() + this.height;\r\n var x = this.getX() + this.width/2;\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.getLeft = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX();\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.getRight = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX() + this.group.getBBox().width;\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.render = function() {\r\n if (this.next) {\r\n\r\n var lineLength = this.getAttr('line-length');\r\n\r\n if (this.next_direction === 'right') {\r\n\r\n var rightPoint = this.getRight();\r\n\r\n if (!this.next.isPositioned) {\r\n\r\n this.next.setY(rightPoint.y - this.next.height/2);\r\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\r\n var self = this;\r\n (function shift() {\r\n var hasSymbolUnder = false;\r\n var symb;\r\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n symb = self.chart.symbols[i];\r\n\r\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\r\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\r\n hasSymbolUnder = true;\r\n break;\r\n }\r\n }\r\n\r\n if (hasSymbolUnder) {\r\n self.next.setX(symb.getX() + symb.width + lineLength);\r\n shift();\r\n }\r\n })();\r\n\r\n this.next.isPositioned = true;\r\n\r\n this.next.render();\r\n }\r\n } else {\r\n var bottomPoint = this.getBottom();\r\n\r\n if (!this.next.isPositioned) {\r\n this.next.shiftY(this.getY() + this.height + lineLength);\r\n this.next.setX(bottomPoint.x - this.next.width/2);\r\n this.next.isPositioned = true;\r\n\r\n this.next.render();\r\n }\r\n }\r\n }\r\n};\r\n\r\nSymbol.prototype.renderLines = function() {\r\n if (this.next) {\r\n if (this.next_direction) {\r\n this.drawLineTo(this.next, '', this.next_direction);\r\n } else {\r\n this.drawLineTo(this.next);\r\n }\r\n }\r\n};\r\n\r\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\r\n if (this.connectedTo.indexOf(symbol) < 0) {\r\n this.connectedTo.push(symbol);\r\n }\r\n\r\n var x = this.getCenter().x,\r\n y = this.getCenter().y,\r\n right = this.getRight(),\r\n bottom = this.getBottom(),\r\n left = this.getLeft();\r\n\r\n var symbolX = symbol.getCenter().x,\r\n symbolY = symbol.getCenter().y,\r\n symbolTop = symbol.getTop(),\r\n symbolRight = symbol.getRight(),\r\n symbolLeft = symbol.getLeft();\r\n\r\n var isOnSameColumn = x === symbolX,\r\n isOnSameLine = y === symbolY,\r\n isUnder = y < symbolY,\r\n isUpper = y > symbolY || this === symbol,\r\n isLeft = x > symbolX,\r\n isRight = x < symbolX;\r\n\r\n var maxX = 0,\r\n line,\r\n lineLength = this.getAttr('line-length'),\r\n lineWith = this.getAttr('line-width');\r\n\r\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\r\n line = drawLine(this.chart, bottom, symbolTop, text);\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x;\r\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\r\n line = drawLine(this.chart, right, symbolLeft, text);\r\n this.rightStart = true;\r\n symbol.leftEnd = true;\r\n maxX = symbolLeft.x;\r\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\r\n line = drawLine(this.chart, left, symbolRight, text);\r\n this.leftStart = true;\r\n symbol.rightEnd = true;\r\n maxX = symbolRight.x;\r\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\r\n line = drawLine(this.chart, right, [\r\n {x: right.x + lineLength/2, y: right.y},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\r\n line = drawLine(this.chart, right, [\r\n {x: right.x + lineLength/2, y: right.y},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((!origin || origin === 'bottom') && isLeft) {\r\n if (this.leftEnd && isUpper) {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n } else {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n }\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n } else if ((!origin || origin === 'bottom') && isRight) {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n } else if ((origin && origin === 'right') && isLeft) {\r\n line = drawLine(this.chart, right, [\r\n {x: right.x + lineLength/2, y: right.y},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((origin && origin === 'right') && isRight) {\r\n line = drawLine(this.chart, right, [\r\n {x: symbolTop.x, y: right.y},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: bottom.y + lineLength/2},\r\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x + lineLength/2;\r\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\r\n var diffX = left.x - lineLength/2;\r\n if (symbolLeft.x < left.x) {\r\n diffX = symbolLeft.x - lineLength/2;\r\n }\r\n line = drawLine(this.chart, left, [\r\n {x: diffX, y: left.y},\r\n {x: diffX, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.leftStart = true;\r\n symbol.topEnd = true;\r\n maxX = left.x;\r\n } else if ((origin === 'left')) {\r\n line = drawLine(this.chart, left, [\r\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\r\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.leftStart = true;\r\n symbol.topEnd = true;\r\n maxX = left.x;\r\n }\r\n\r\n //update line style\r\n if (this.lineStyle[symbol.key] && line){\r\n line.attr( this.lineStyle[symbol.key]);\r\n }\r\n\r\n if (line) {\r\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\r\n var otherLine = this.chart.lines[l];\r\n var len;\r\n\r\n var ePath = otherLine.attr('path'),\r\n lPath = line.attr('path');\r\n\r\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\r\n var newPath = [];\r\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\r\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\r\n\r\n var line1_from_x = newPath[0][1];\r\n var line1_from_y = newPath[0][2];\r\n var line1_to_x = newPath[1][1];\r\n var line1_to_y = newPath[1][2];\r\n\r\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\r\n var newLinePath = [];\r\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\r\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\r\n\r\n var line2_from_x = newLinePath[0][1];\r\n var line2_from_y = newLinePath[0][2];\r\n var line2_to_x = newLinePath[1][1];\r\n var line2_to_y = newLinePath[1][2];\r\n\r\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);\r\n if (res.onLine1 && res.onLine2) {\r\n\r\n var newSegment;\r\n if (line2_from_y === line2_to_y) {\r\n if (line2_from_x > line2_to_x) {\r\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n } else {\r\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n }\r\n } else {\r\n if (line2_from_y > line2_to_y) {\r\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n } else {\r\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n }\r\n }\r\n\r\n lP += 2;\r\n len += 2;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.chart.lines.push(line);\r\n }\r\n\r\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\r\n this.chart.maxXFromLine = maxX;\r\n }\r\n};\r\n\r\nmodule.exports = Symbol;\r\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) {\r\n var i, len;\r\n var path = 'M{0},{1}';\r\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\r\n path += ' L{' + i + '},{' + (i + 1) + '}';\r\n }\r\n var pathValues = [location.x, location.y];\r\n for (i = 0, len = points.length; i < len; i++) {\r\n pathValues.push(points[i].x);\r\n pathValues.push(points[i].y);\r\n }\r\n var symbol = chart.paper.path(path, pathValues);\r\n symbol.attr('stroke', chart.options['element-color']);\r\n symbol.attr('stroke-width', chart.options['line-width']);\r\n\r\n var font = chart.options.font;\r\n var fontF = chart.options['font-family'];\r\n var fontW = chart.options['font-weight'];\r\n\r\n if (font) symbol.attr({ 'font': font });\r\n if (fontF) symbol.attr({ 'font-family': fontF });\r\n if (fontW) symbol.attr({ 'font-weight': fontW });\r\n\r\n return symbol;\r\n}\r\n\r\nfunction drawLine(chart, from, to, text) {\r\n var i, len;\r\n\r\n if (Object.prototype.toString.call(to) !== '[object Array]') {\r\n to = [to];\r\n }\r\n\r\n var path = 'M{0},{1}';\r\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\r\n path += ' L{' + i + '},{' + (i + 1) + '}';\r\n }\r\n var pathValues = [from.x, from.y];\r\n for (i = 0, len = to.length; i < len; i++) {\r\n pathValues.push(to[i].x);\r\n pathValues.push(to[i].y);\r\n }\r\n\r\n var line = chart.paper.path(path, pathValues);\r\n line.attr({\r\n stroke: chart.options['line-color'],\r\n 'stroke-width': chart.options['line-width'],\r\n 'arrow-end': chart.options['arrow-end']\r\n });\r\n\r\n var font = chart.options.font;\r\n var fontF = chart.options['font-family'];\r\n var fontW = chart.options['font-weight'];\r\n\r\n if (font) line.attr({ 'font': font });\r\n if (fontF) line.attr({ 'font-family': fontF });\r\n if (fontW) line.attr({ 'font-weight': fontW });\r\n\r\n if (text) {\r\n\r\n var centerText = false;\r\n\r\n var textPath = chart.paper.text(0, 0, text);\r\n\r\n var isHorizontal = false;\r\n var firstTo = to[0];\r\n\r\n if (from.y === firstTo.y) {\r\n isHorizontal = true;\r\n }\r\n\r\n var x = 0,\r\n y = 0;\r\n\r\n if (centerText) {\r\n if (from.x > firstTo.x) {\r\n x = from.x - (from.x - firstTo.x)/2;\r\n } else {\r\n x = firstTo.x - (firstTo.x - from.x)/2;\r\n }\r\n\r\n if (from.y > firstTo.y) {\r\n y = from.y - (from.y - firstTo.y)/2;\r\n } else {\r\n y = firstTo.y - (firstTo.y - from.y)/2;\r\n }\r\n\r\n if (isHorizontal) {\r\n x -= textPath.getBBox().width/2;\r\n y -= chart.options['text-margin'];\r\n } else {\r\n x += chart.options['text-margin'];\r\n y -= textPath.getBBox().height/2;\r\n }\r\n } else {\r\n x = from.x;\r\n y = from.y;\r\n\r\n if (isHorizontal) {\r\n x += chart.options['text-margin']/2;\r\n y -= chart.options['text-margin'];\r\n } else {\r\n x += chart.options['text-margin']/2;\r\n y += chart.options['text-margin'];\r\n }\r\n }\r\n\r\n textPath.attr({\r\n 'text-anchor': 'start',\r\n 'font-size': chart.options['font-size'],\r\n 'fill': chart.options['font-color'],\r\n x: x,\r\n y: y\r\n });\r\n\r\n if (font) textPath.attr({ 'font': font });\r\n if (fontF) textPath.attr({ 'font-family': fontF });\r\n if (fontW) textPath.attr({ 'font-weight': fontW });\r\n }\r\n\r\n return line;\r\n}\r\n\r\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\r\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\r\n var denominator, a, b, numerator1, numerator2, result = {\r\n x: null,\r\n y: null,\r\n onLine1: false,\r\n onLine2: false\r\n };\r\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\r\n if (denominator === 0) {\r\n return result;\r\n }\r\n a = line1StartY - line2StartY;\r\n b = line1StartX - line2StartX;\r\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\r\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\r\n a = numerator1 / denominator;\r\n b = numerator2 / denominator;\r\n\r\n // if we cast these lines infinitely in both directions, they intersect here:\r\n result.x = line1StartX + (a * (line1EndX - line1StartX));\r\n result.y = line1StartY + (a * (line1EndY - line1StartY));\r\n /*\r\n // it is worth noting that this should be the same as:\r\n x = line2StartX + (b * (line2EndX - line2StartX));\r\n y = line2StartX + (b * (line2EndY - line2StartY));\r\n */\r\n // if line1 is a segment and line2 is infinite, they intersect if:\r\n if (a > 0 && a < 1) {\r\n result.onLine1 = true;\r\n }\r\n // if line2 is a segment and line1 is infinite, they intersect if:\r\n if (b > 0 && b < 1) {\r\n result.onLine2 = true;\r\n }\r\n // if line1 and line2 are segments, they intersect if both of the above are true\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n\tdrawPath: drawPath,\r\n\tdrawLine: drawLine,\r\n\tcheckLineIntersection: checkLineIntersection\r\n};\r\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');\r\nvar Start = require('./flowchart.symbol.start');\r\nvar End = require('./flowchart.symbol.end');\r\nvar Operation = require('./flowchart.symbol.operation');\r\nvar InputOutput = require('./flowchart.symbol.inputoutput');\r\nvar Subroutine = require('./flowchart.symbol.subroutine');\r\nvar Condition = require('./flowchart.symbol.condition');\r\n\r\nfunction parse(input) {\r\n input = input || '';\r\n input = input.trim();\r\n\r\n var chart = {\r\n symbols: {},\r\n start: null,\r\n drawSVG: function(container, options) {\r\n var self = this;\r\n\r\n if (this.diagram) {\r\n this.diagram.clean();\r\n }\r\n\r\n var diagram = new FlowChart(container, options);\r\n this.diagram = diagram;\r\n var dispSymbols = {};\r\n\r\n function getDisplaySymbol(s) {\r\n if (dispSymbols[s.key]) {\r\n return dispSymbols[s.key];\r\n }\r\n\r\n switch (s.symbolType) {\r\n case 'start':\r\n dispSymbols[s.key] = new Start(diagram, s);\r\n break;\r\n case 'end':\r\n dispSymbols[s.key] = new End(diagram, s);\r\n break;\r\n case 'operation':\r\n dispSymbols[s.key] = new Operation(diagram, s);\r\n break;\r\n case 'inputoutput':\r\n dispSymbols[s.key] = new InputOutput(diagram, s); \r\n break;\r\n case 'subroutine':\r\n dispSymbols[s.key] = new Subroutine(diagram, s);\r\n break;\r\n case 'condition':\r\n dispSymbols[s.key] = new Condition(diagram, s);\r\n break;\r\n default:\r\n return new Error('Wrong symbol type!');\r\n }\r\n\r\n return dispSymbols[s.key];\r\n }\r\n\r\n (function constructChart(s, prevDisp, prev) {\r\n var dispSymb = getDisplaySymbol(s);\r\n\r\n if (self.start === s) {\r\n diagram.startWith(dispSymb);\r\n } else if (prevDisp && prev && !prevDisp.pathOk) {\r\n if (prevDisp instanceof(Condition)) {\r\n if (prev.yes === s) {\r\n prevDisp.yes(dispSymb);\r\n }\r\n if (prev.no === s) {\r\n prevDisp.no(dispSymb);\r\n }\r\n } else {\r\n prevDisp.then(dispSymb);\r\n }\r\n }\r\n\r\n if (dispSymb.pathOk) {\r\n return dispSymb;\r\n }\r\n\r\n if (dispSymb instanceof(Condition)) {\r\n if (s.yes) {\r\n constructChart(s.yes, dispSymb, s);\r\n }\r\n if (s.no) {\r\n constructChart(s.no, dispSymb, s);\r\n }\r\n } else if (s.next) {\r\n constructChart(s.next, dispSymb, s);\r\n }\r\n\r\n return dispSymb;\r\n })(this.start);\r\n\r\n diagram.render();\r\n },\r\n clean: function() {\r\n this.diagram.clean();\r\n }\r\n };\r\n\r\n var lines = [];\r\n var prevBreak = 0;\r\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\r\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\r\n var line0 = input.substring(prevBreak, i0);\r\n prevBreak = i0 + 1;\r\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\r\n }\r\n }\r\n\r\n if(prevBreak < input.length) {\r\n lines.push(input.substr(prevBreak));\r\n }\r\n\r\n for (var l = 1, len = lines.length; l < len;) {\r\n var currentLine = lines[l];\r\n\r\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\r\n lines[l - 1] += '\\n' + currentLine;\r\n lines.splice(l, 1);\r\n len--;\r\n } else {\r\n l++;\r\n }\r\n }\r\n\r\n function getStyle(s){\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n return s.substring(startIndex,endIndex);\r\n }\r\n return '{}';\r\n }\r\n\r\n function getSymbValue(s){\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n return s.substring(startIndex,endIndex);\r\n }\r\n return '';\r\n }\r\n\r\n function getSymbol(s) {\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n return chart.symbols[s.substring(0, startIndex - 1)]; \r\n }\r\n return chart.symbols[s];\r\n }\r\n\r\n function getNextPath(s) {\r\n var next = 'next';\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n next = flowSymb.substring(startIndex, endIndex);\r\n if (next.indexOf(',') < 0) {\r\n if (next !== 'yes' && next !== 'no') {\r\n next = 'next, ' + next;\r\n }\r\n }\r\n }\r\n return next;\r\n }\r\n\r\n while (lines.length > 0) {\r\n var line = lines.splice(0, 1)[0].trim();\r\n\r\n if (line.indexOf('=>') >= 0) {\r\n // definition\r\n var parts = line.split('=>');\r\n var symbol = {\r\n key: parts[0].replace(/\\(.*\\)/, ''),\r\n symbolType: parts[1],\r\n text: null,\r\n link: null,\r\n target: null,\r\n flowstate: null,\r\n lineStyle: {},\r\n params: {}\r\n };\r\n\r\n //parse parameters\r\n var params = parts[0].match(/\\((.*)\\)/);\r\n if (params && params.length > 1){\r\n var entries = params[1].split(',');\r\n for(var i = 0; i < entries.length; i++) {\r\n var entry = entries[0].split('=');\r\n if (entry.length == 2){\r\n symbol.params[entry[0]] = entry[1];\r\n }\r\n }\r\n }\r\n\r\n var sub;\r\n\r\n if (symbol.symbolType.indexOf(': ') >= 0) {\r\n sub = symbol.symbolType.split(': ');\r\n symbol.symbolType = sub.shift();\r\n symbol.text = sub.join(': ');\r\n }\r\n\r\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\r\n sub = symbol.text.split(':>');\r\n symbol.text = sub.shift();\r\n symbol.link = sub.join(':>');\r\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\r\n sub = symbol.symbolType.split(':>');\r\n symbol.symbolType = sub.shift();\r\n symbol.link = sub.join(':>');\r\n }\r\n\r\n if (symbol.symbolType.indexOf('\\n') >= 0) {\r\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\r\n }\r\n\r\n /* adding support for links */\r\n if (symbol.link) {\r\n var startIndex = symbol.link.indexOf('[') + 1;\r\n var endIndex = symbol.link.indexOf(']');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n symbol.target = symbol.link.substring(startIndex, endIndex);\r\n symbol.link = symbol.link.substring(0, startIndex - 1);\r\n }\r\n }\r\n /* end of link support */\r\n\r\n /* adding support for flowstates */\r\n if (symbol.text) {\r\n if (symbol.text.indexOf('|') >= 0) {\r\n var txtAndState = symbol.text.split('|');\r\n symbol.flowstate = txtAndState.pop().trim();\r\n symbol.text = txtAndState.join('|');\r\n }\r\n }\r\n /* end of flowstate support */\r\n\r\n chart.symbols[symbol.key] = symbol;\r\n\r\n } else if (line.indexOf('->') >= 0) {\r\n // flow\r\n var flowSymbols = line.split('->');\r\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\r\n var flowSymb = flowSymbols[i];\r\n var symbVal = getSymbValue(flowSymb);\r\n\r\n if (symbVal === 'true' || symbVal === 'false') {\r\n // map true or false to yes or no respectively\r\n flowSymb = flowSymb.replace('true', 'yes');\r\n flowSymb = flowSymb.replace('false', 'no');\r\n }\r\n\r\n var realSymb = getSymbol(flowSymb);\r\n var next = getNextPath(flowSymb);\r\n\r\n var direction = null;\r\n if (next.indexOf(',') >= 0) {\r\n var condOpt = next.split(',');\r\n next = condOpt[0];\r\n direction = condOpt[1].trim();\r\n }\r\n\r\n if (!chart.start) {\r\n chart.start = realSymb;\r\n }\r\n\r\n if (i + 1 < lenS) {\r\n var nextSymb = flowSymbols[i + 1];\r\n realSymb[next] = getSymbol(nextSymb);\r\n realSymb['direction_' + next] = direction;\r\n direction = null;\r\n }\r\n }\r\n } else if (line.indexOf('@>') >= 0) {\r\n\r\n // line style\r\n var lineStyleSymbols = line.split('@>');\r\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\r\n\r\n if ((i+1) != lenS){\r\n var curSymb = getSymbol(lineStyleSymbols[i]);\r\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\r\n\r\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i+1]));\r\n }\r\n }\r\n }\r\n\r\n }\r\n return chart;\r\n}\r\n\r\nmodule.exports = parse;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\nvar drawAPI = require('./flowchart.functions');\r\nvar drawPath = drawAPI.drawPath;\r\n\r\nfunction Condition(chart, options) {\r\n options = options || {};\r\n Symbol.call(this, chart, options);\r\n this.textMargin = this.getAttr('text-margin');\r\n this.yes_direction = 'bottom';\r\n this.no_direction = 'right';\r\n this.params = options.params;\r\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\r\n if (options.direction_yes === 'right') {\r\n this.no_direction = 'bottom';\r\n this.yes_direction = 'right';\r\n } else {\r\n this.no_direction = 'right';\r\n this.yes_direction = 'bottom';\r\n }\r\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\r\n if (options.direction_no === 'right') {\r\n this.yes_direction = 'bottom';\r\n this.no_direction = 'right';\r\n } else {\r\n this.yes_direction = 'right';\r\n this.no_direction = 'bottom';\r\n }\r\n } else {\r\n this.yes_direction = 'bottom';\r\n this.no_direction = 'right';\r\n }\r\n\r\n this.yes_direction = this.yes_direction || 'bottom';\r\n this.no_direction = this.no_direction || 'right';\r\n\r\n this.text.attr({\r\n x: this.textMargin * 2\r\n });\r\n\r\n var width = this.text.getBBox().width + 3 * this.textMargin;\r\n width += width/2;\r\n var height = this.text.getBBox().height + 2 * this.textMargin;\r\n height += height/2;\r\n height = Math.max(width * 0.5, height);\r\n var startX = width/4;\r\n var startY = height/4;\r\n\r\n this.text.attr({\r\n x: startX + this.textMargin/2\r\n });\r\n\r\n var start = {x: startX, y: startY};\r\n var points = [\r\n {x: startX - width/4, y: startY + height/4},\r\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\r\n {x: startX - width/4 + width, y: startY + height/4},\r\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\r\n {x: startX - width/4, y: startY + height/4}\r\n ];\r\n\r\n var symbol = drawPath(chart, start, points);\r\n\r\n symbol.attr({\r\n stroke: this.getAttr('element-color'),\r\n 'stroke-width': this.getAttr('line-width'),\r\n fill: this.getAttr('fill')\r\n });\r\n if (options.link) { symbol.attr('href', options.link); }\r\n if (options.target) { symbol.attr('target', options.target); }\r\n if (options.key) { symbol.node.id = options.key; }\r\n symbol.node.setAttribute('class', this.getAttr('class'));\r\n\r\n this.text.attr({\r\n y: symbol.getBBox().height/2\r\n });\r\n\r\n this.group.push(symbol);\r\n symbol.insertBefore(this.text);\r\n\r\n this.initialize();\r\n}\r\ninherits(Condition, Symbol);\r\n\r\nCondition.prototype.render = function() {\r\n\r\n if (this.yes_direction) {\r\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\r\n }\r\n\r\n if (this.no_direction) {\r\n this[this.no_direction + '_symbol'] = this.no_symbol;\r\n }\r\n\r\n var lineLength = this.getAttr('line-length');\r\n\r\n if (this.bottom_symbol) {\r\n var bottomPoint = this.getBottom();\r\n\r\n if (!this.bottom_symbol.isPositioned) {\r\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\r\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\r\n this.bottom_symbol.isPositioned = true;\r\n\r\n this.bottom_symbol.render();\r\n }\r\n }\r\n\r\n if (this.right_symbol) {\r\n var rightPoint = this.getRight();\r\n\r\n if (!this.right_symbol.isPositioned) {\r\n\r\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\r\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\r\n var self = this;\r\n (function shift() {\r\n var hasSymbolUnder = false;\r\n var symb;\r\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n symb = self.chart.symbols[i];\r\n\r\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \r\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\r\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\r\n hasSymbolUnder = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (hasSymbolUnder) {\r\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\r\n shift();\r\n }\r\n })();\r\n\r\n this.right_symbol.isPositioned = true;\r\n\r\n this.right_symbol.render();\r\n }\r\n }\r\n};\r\n\r\nCondition.prototype.renderLines = function() {\r\n if (this.yes_symbol) {\r\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\r\n }\r\n\r\n if (this.no_symbol) {\r\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\r\n }\r\n};\r\n\r\nmodule.exports = Condition;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Raphael = require('raphael');\r\nvar defaults = require('./flowchart.helpers').defaults;\r\nvar defaultOptions = require('./flowchart.defaults');\r\nvar Condition = require('./flowchart.symbol.condition');\r\n\r\nfunction FlowChart(container, options) {\r\n options = options || {};\r\n\r\n this.paper = new Raphael(container);\r\n\r\n this.options = defaults(options, defaultOptions);\r\n\r\n this.symbols = [];\r\n this.lines = [];\r\n this.start = null;\r\n}\r\n\r\nFlowChart.prototype.handle = function(symbol) {\r\n if (this.symbols.indexOf(symbol) <= -1) {\r\n this.symbols.push(symbol);\r\n }\r\n\r\n var flowChart = this;\r\n\r\n if (symbol instanceof(Condition)) {\r\n symbol.yes = function(nextSymbol) {\r\n symbol.yes_symbol = nextSymbol;\r\n if(symbol.no_symbol) {\r\n symbol.pathOk = true;\r\n }\r\n return flowChart.handle(nextSymbol);\r\n };\r\n symbol.no = function(nextSymbol) {\r\n symbol.no_symbol = nextSymbol;\r\n if(symbol.yes_symbol) {\r\n symbol.pathOk = true;\r\n }\r\n return flowChart.handle(nextSymbol);\r\n };\r\n } else {\r\n symbol.then = function(nextSymbol) {\r\n symbol.next = nextSymbol;\r\n symbol.pathOk = true;\r\n return flowChart.handle(nextSymbol);\r\n };\r\n }\r\n\r\n return symbol;\r\n};\r\n\r\nFlowChart.prototype.startWith = function(symbol) {\r\n this.start = symbol;\r\n return this.handle(symbol);\r\n};\r\n\r\nFlowChart.prototype.render = function() {\r\n var maxWidth = 0,\r\n maxHeight = 0,\r\n i = 0,\r\n len = 0,\r\n maxX = 0,\r\n maxY = 0,\r\n minX = 0,\r\n minY = 0,\r\n symbol,\r\n line;\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n if (symbol.width > maxWidth) {\r\n maxWidth = symbol.width;\r\n }\r\n if (symbol.height > maxHeight) {\r\n maxHeight = symbol.height;\r\n }\r\n }\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\r\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\r\n }\r\n\r\n this.start.render();\r\n // for (i = 0, len = this.symbols.length; i < len; i++) {\r\n // symbol = this.symbols[i];\r\n // symbol.render();\r\n // }\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n symbol.renderLines();\r\n }\r\n\r\n maxX = this.maxXFromLine;\r\n\r\n var x;\r\n var y;\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n x = symbol.getX() + symbol.width;\r\n y = symbol.getY() + symbol.height;\r\n if (x > maxX) {\r\n maxX = x;\r\n }\r\n if (y > maxY) {\r\n maxY = y;\r\n }\r\n }\r\n\r\n for (i = 0, len = this.lines.length; i < len; i++) {\r\n line = this.lines[i].getBBox();\r\n x = line.x;\r\n y = line.y;\r\n var x2 = line.x2;\r\n var y2 = line.y2;\r\n if (x < minX) {\r\n minX = x;\r\n }\r\n if (y < minY) {\r\n minY = y;\r\n }\r\n if (x2 > maxX) {\r\n maxX = x2;\r\n }\r\n if (y2 > maxY) {\r\n maxY = y2;\r\n }\r\n }\r\n\r\n var scale = this.options['scale'];\r\n var lineWidth = this.options['line-width'];\r\n\r\n if (minX < 0) minX -= lineWidth;\r\n if (minY < 0) minY -= lineWidth;\r\n\r\n var width = maxX + lineWidth - minX;\r\n var height = maxY + lineWidth - minY;\r\n\r\n this.paper.setSize(width * scale, height * scale);\r\n this.paper.setViewBox(minX, minY, width, height, true);\r\n};\r\n\r\nFlowChart.prototype.clean = function() {\r\n if (this.paper) {\r\n var paperDom = this.paper.canvas;\r\n paperDom.parentNode.removeChild(paperDom);\r\n }\r\n};\r\n\r\nmodule.exports = FlowChart;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 6\n// module chunks = 0","// defaults\r\nmodule.exports = {\r\n 'x': 0,\r\n 'y': 0,\r\n 'line-width': 3,\r\n 'line-length': 50,\r\n 'text-margin': 10,\r\n 'font-size': 14,\r\n 'font-color': 'black',\r\n // 'font': 'normal',\r\n // 'font-family': 'calibri',\r\n // 'font-weight': 'normal',\r\n 'line-color': 'black',\r\n 'element-color': 'black',\r\n 'fill': 'white',\r\n 'yes-text': 'yes',\r\n 'no-text': 'no',\r\n 'arrow-end': 'block',\r\n 'class': 'flowchart',\r\n 'scale': 1,\r\n 'symbols': {\r\n 'start': {},\r\n 'end': {},\r\n 'condition': {},\r\n 'inputoutput': {},\r\n 'operation': {},\r\n 'subroutine': {}\r\n }//,\r\n // 'flowstate' : {\r\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\r\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\r\n // 'future' : { 'fill': '#FFFF99'},\r\n // 'invalid': {'fill': '#444444'}\r\n // }\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 7\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\r\nif (!Array.prototype.indexOf) {\r\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\r\n \"use strict\";\r\n if (this === null) {\r\n throw new TypeError();\r\n }\r\n var t = Object(this);\r\n var len = t.length >>> 0;\r\n if (len === 0) {\r\n return -1;\r\n }\r\n var n = 0;\r\n if (arguments.length > 0) {\r\n n = Number(arguments[1]);\r\n if (n != n) { // shortcut for verifying if it's NaN\r\n n = 0;\r\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\r\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n }\r\n }\r\n if (n >= len) {\r\n return -1;\r\n }\r\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\r\n for (; k < len; k++) {\r\n if (k in t && t[k] === searchElement) {\r\n return k;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\n\r\n// add lastIndexOf to non ECMA-262 standard compliant browsers\r\nif (!Array.prototype.lastIndexOf) {\r\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\r\n \"use strict\";\r\n if (this === null) {\r\n throw new TypeError();\r\n }\r\n var t = Object(this);\r\n var len = t.length >>> 0;\r\n if (len === 0) {\r\n return -1;\r\n }\r\n var n = len;\r\n if (arguments.length > 1) {\r\n n = Number(arguments[1]);\r\n if (n != n) {\r\n n = 0;\r\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\r\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n }\r\n }\r\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\r\n for (; k >= 0; k--) {\r\n if (k in t && t[k] === searchElement) {\r\n return k;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\n\r\nif (!String.prototype.trim) {\r\n String.prototype.trim = function() {\r\n return this.replace(/^\\s+|\\s+$/g, '');\r\n };\r\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 8\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction End(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n options = options || {};\r\n options.text = options.text || 'End';\r\n Symbol.call(this, chart, options, symbol);\r\n}\r\ninherits(End, Symbol);\r\n\r\nmodule.exports = End;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\nvar drawAPI = require('./flowchart.functions');\r\nvar drawPath = drawAPI.drawPath;\r\n\r\nfunction InputOutput(chart, options) {\r\n options = options || {};\r\n Symbol.call(this, chart, options);\r\n this.textMargin = this.getAttr('text-margin');\r\n\r\n this.text.attr({\r\n x: this.textMargin * 3\r\n });\r\n\r\n var width = this.text.getBBox().width + 4 * this.textMargin;\r\n var height = this.text.getBBox().height + 2 * this.textMargin;\r\n var startX = this.textMargin;\r\n var startY = height/2;\r\n\r\n var start = {x: startX, y: startY};\r\n var points = [\r\n {x: startX - this.textMargin, y: height},\r\n {x: startX - this.textMargin + width, y: height},\r\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\r\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\r\n {x: startX, y: startY}\r\n ];\r\n\r\n var symbol = drawPath(chart, start, points);\r\n\r\n symbol.attr({\r\n stroke: this.getAttr('element-color'),\r\n 'stroke-width': this.getAttr('line-width'),\r\n fill: this.getAttr('fill')\r\n });\r\n if (options.link) { symbol.attr('href', options.link); }\r\n if (options.target) { symbol.attr('target', options.target); }\r\n if (options.key) { symbol.node.id = options.key; }\r\n symbol.node.setAttribute('class', this.getAttr('class'));\r\n\r\n this.text.attr({\r\n y: symbol.getBBox().height/2\r\n });\r\n\r\n this.group.push(symbol);\r\n symbol.insertBefore(this.text);\r\n\r\n this.initialize();\r\n}\r\ninherits(InputOutput, Symbol);\r\n\r\nInputOutput.prototype.getLeft = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX() + this.textMargin;\r\n return {x: x, y: y};\r\n};\r\n\r\nInputOutput.prototype.getRight = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\r\n return {x: x, y: y};\r\n};\r\n\r\nmodule.exports = InputOutput;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction Operation(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0);\r\n options = options || {};\r\n Symbol.call(this, chart, options, symbol);\r\n}\r\ninherits(Operation, Symbol);\r\n\r\nmodule.exports = Operation;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction Start(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n options = options || {};\r\n options.text = options.text || 'Start';\r\n Symbol.call(this, chart, options, symbol);\r\n}\r\ninherits(Start, Symbol);\r\n\r\nmodule.exports = Start;\r\n\r\n// Start.prototype.render = function() {\r\n// if (this.next) {\r\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\r\n\r\n// var bottomPoint = this.getBottom();\r\n// var topPoint = this.next.getTop();\r\n\r\n// if (!this.next.isPositioned) {\r\n// this.next.shiftY(this.getY() + this.height + lineLength);\r\n// this.next.setX(bottomPoint.x - this.next.width/2);\r\n// this.next.isPositioned = true;\r\n\r\n// this.next.render();\r\n// }\r\n// }\r\n// };\r\n\r\n// Start.prototype.renderLines = function() {\r\n// if (this.next) {\r\n// this.drawLineTo(this.next);\r\n// }\r\n// };\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction Subroutine(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0);\r\n options = options || {};\r\n Symbol.call(this, chart, options, symbol);\r\n\r\n symbol.attr({\r\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\r\n });\r\n\r\n this.text.attr({\r\n 'x': 2 * this.getAttr('text-margin')\r\n });\r\n\r\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\r\n innerWrap.attr({\r\n x: this.getAttr('text-margin'),\r\n stroke: this.getAttr('element-color'),\r\n 'stroke-width': this.getAttr('line-width'),\r\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\r\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\r\n fill: this.getAttr('fill')\r\n });\r\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\r\n\r\n var font = this.getAttr('font');\r\n var fontF = this.getAttr('font-family');\r\n var fontW = this.getAttr('font-weight');\r\n\r\n if (font) innerWrap.attr({ 'font': font });\r\n if (fontF) innerWrap.attr({ 'font-family': fontF });\r\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\r\n\r\n if (options.link) { innerWrap.attr('href', options.link); }\r\n if (options.target) { innerWrap.attr('target', options.target); }\r\n this.group.push(innerWrap);\r\n innerWrap.insertBefore(this.text);\r\n\r\n this.initialize();\r\n}\r\ninherits(Subroutine, Symbol);\r\n\r\nmodule.exports = Subroutine;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 13\n// module chunks = 0","if (typeof jQuery != 'undefined') {\r\n\tvar parse = require('./flowchart.parse');\r\n\t(function( $ ) {\r\n\t\t$.fn.flowChart = function( options ) {\r\n\t\t\treturn this.each(function() {\r\n\t\t\t\tvar $this = $(this);\r\n\t\t\t\tvar chart = parse($this.text());\r\n\t\t\t\t$this.html('');\r\n\t\t\t\tchart.drawSVG(this, options);\r\n\t\t\t});\r\n\t\t};\r\n\t})(jQuery); // eslint-disable-line\r\n}\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 14\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 15\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/src/flowchart.parse.js b/src/flowchart.parse.js index 9a7519e5..62870ee8 100644 --- a/src/flowchart.parse.js +++ b/src/flowchart.parse.js @@ -40,7 +40,7 @@ function parse(input) { dispSymbols[s.key] = new Operation(diagram, s); break; case 'inputoutput': - dispSymbols[s.key] = new InputOutput(diagram, s); + dispSymbols[s.key] = new InputOutput(diagram, s); break; case 'subroutine': dispSymbols[s.key] = new Subroutine(diagram, s); @@ -133,11 +133,20 @@ function parse(input) { return '{}'; } + function getSymbValue(s){ + var startIndex = s.indexOf('(') + 1; + var endIndex = s.indexOf(')'); + if (startIndex >= 0 && endIndex >= 0) { + return s.substring(startIndex,endIndex); + } + return ''; + } + function getSymbol(s) { var startIndex = s.indexOf('(') + 1; var endIndex = s.indexOf(')'); if (startIndex >= 0 && endIndex >= 0) { - return chart.symbols[s.substring(0, startIndex - 1)]; + return chart.symbols[s.substring(0, startIndex - 1)]; } return chart.symbols[s]; } @@ -236,6 +245,13 @@ function parse(input) { var flowSymbols = line.split('->'); for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) { var flowSymb = flowSymbols[i]; + var symbVal = getSymbValue(flowSymb); + + if (symbVal === 'true' || symbVal === 'false') { + // map true or false to yes or no respectively + flowSymb = flowSymb.replace('true', 'yes'); + flowSymb = flowSymb.replace('false', 'no'); + } var realSymb = getSymbol(flowSymb); var next = getNextPath(flowSymb); @@ -266,7 +282,7 @@ function parse(input) { if ((i+1) != lenS){ var curSymb = getSymbol(lineStyleSymbols[i]); - var nextSymb = getSymbol(lineStyleSymbols[i+1]) + var nextSymb = getSymbol(lineStyleSymbols[i+1]); curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i+1])); } From de5182a526ec975b09cba49d6153f93dfe0b647b Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Wed, 27 Dec 2017 19:01:44 +0100 Subject: [PATCH 039/117] bump --- README.md | 2 +- license | 2 +- package.json | 2 +- release/flowchart.js | 2 +- release/flowchart.js.map | 2 +- release/flowchart.min.js | 2 +- release/flowchart.min.js.map | 2 +- releasenotes.md | 4 ++++ site | 2 +- 9 files changed, 12 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index dd0b74af..206f15d0 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ Many thanks to [js-sequence-diagrams](http://bramp.github.io/js-sequence-diagram ## Licence -Copyright (c) 2017 Adriano Raiano +Copyright (c) 2018 Adriano Raiano Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/license b/license index 8e741c39..6305caf9 100644 --- a/license +++ b/license @@ -1,4 +1,4 @@ -Copyright (c) 2017 Adriano Raiano +Copyright (c) 2018 Adriano Raiano Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/package.json b/package.json index dccb6785..478242b1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.7.0", + "version": "1.8.0", "main": "./index", "private": false, "engines": { diff --git a/release/flowchart.js b/release/flowchart.js index fa81e409..07c3518d 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,4 +1,4 @@ -// flowchart.js, v1.7.0 +// flowchart.js, v1.8.0 // Copyright (c)2017 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js diff --git a/release/flowchart.js.map b/release/flowchart.js.map index 60594d4e..e325e1e3 100644 --- a/release/flowchart.js.map +++ b/release/flowchart.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap b25fc93d093648e4134a","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":";;;;;CAAA,SAAAA,MAAAC;IACA,uBAAAC,WAAA,mBAAAC,QACAA,OAAAD,UAAAD,QAAAG,QAAA,kBACA,yBAAAC,iBAAAC,KACAD,SAAA,aAAAJ,eACA;QACA,IAAAM,IAAAN,QAAA,mBAAAC,UAAAE,QAAA,aAAAJ,KAAA;QACA,SAAAQ,KAAAD,IAAA,mBAAAL,oBAAAF,MAAAQ,KAAAD,EAAAC;;EAECC,MAAA,SAAAC;;IACD,OCAgB,SAAUC;;;;;QCN1B,SAAAC,oBAAAC;;;;;YAGA,IAAAC,iBAAAD;YACA,OAAAC,iBAAAD,UAAAX;;;;;YAGA,IAAAC,SAAAW,iBAAAD;;gBACAX;;gBACAa,IAAAF;;gBACAG,SAAA;;;;;;;;;;;;;;YAUA,OANAL,QAAAE,UAAAI,KAAAd,OAAAD,SAAAC,eAAAD,SAAAU;YAGAT,OAAAa,UAAA,GAGAb,OAAAD;;;;;;QAvBA,IAAAY;;;;;;;;;;;;;;;;;;QAqCA,OATAF,oBAAAM,IAAAP,SAGAC,oBAAAO,IAAAL;QAGAF,oBAAAQ,IAAA,IAGAR,oBAAA;;;;;;IDmBM,SAAUT,QAAQD,SAASU;QEzDjCA,gDAAA;QACA,IAAAS,QAAAT,iDAAA;QACAA,+CAAA;QAEA,IAAAU;YACAD;;QAGA,sBAAAE,WACAA,OAAAC,YAAAF,YAGAnB,OAAAD,UAAAoB;;;;;;IFmEM,SAAUnB,QAAQD;QG/ExB,SAAAuB,UAAAC,SAAAC;YACA,KAAAD,WAAA,qBAAAA,SACA,OAAAC;YAGA,IAAAC;YACA,SAAAC,YAAAF,gBACAC,OAAAC,YAAAF,eAAAE;YAGA,KAAAA,YAAAH,SACAA,QAAAG,cACA,mBAAAD,OAAAC,YACAD,OAAAC,YAAAJ,UAAAG,OAAAC,WAAAH,QAAAG,aAEAD,OAAAC,YAAAH,QAAAG;YAIA,OAAAD;;QAGA,SAAAE,UAAAC,MAAAC;YACA,yBAAAC,OAAA;YAEAF,KAAAG,SAAAF,WACAD,KAAAI,YAAAF,OAAAG,OAAAJ,UAAAG;gBACAE;oBACAC,OAAAP;oBACAQ,aAAA;oBACAC,WAAA;oBACAC,eAAA;;qBAGA;;gBAEAV,KAAAG,SAAAF;gBACA,IAAAU,WAAA;gBACAA,SAAAP,YAAAH,UAAAG,WACAJ,KAAAI,YAAA,IAAAO,YACAX,KAAAI,UAAAE,cAAAN;;;;;QAMA5B,OAAAD;YACAyC,UAAAlB;YACAmB,UAAAd;;;;;;;IH0FM,SAAU3B,QAAQD,SAASU;QItIjC,SAAAiC,OAAAC,OAAApB,SAAAqB;YACAtC,KAAAqC,eACArC,KAAAuC,QAAAvC,KAAAqC,MAAAG,MAAAC,OACAzC,KAAAsC,iBACAtC,KAAA0C;YACA1C,KAAA2C,aAAA1B,QAAA0B,YACA3C,KAAA4C,YAAA3B,QAAA2B,aAAA;YACA5C,KAAA6C,YAAA5B,QAAA4B,iBACA7C,KAAA8C,MAAA7B,QAAA6B,OAAA,IAEA9C,KAAA+C,iBAAA9B,QAAA+B,QAAA/B,QAAA,iBAAAA,QAAA,iBAAAgC;YAEAjD,KAAAkD,OAAAlD,KAAAqC,MAAAG,MAAAU,KAAA,MAAAjC,QAAAiC;YAEAjC,QAAA6B,QAAA9C,KAAAkD,KAAAC,KAAA7C,KAAAW,QAAA6B,MAAA,MACA9C,KAAAkD,KAAAC,KAAAC,aAAA,SAAApD,KAAAqD,QAAA;YAEArD,KAAAkD,KAAAI;gBACAC,eAAA;gBACAC,GAAAxD,KAAAqD,QAAA;gBACAI,MAAAzD,KAAAqD,QAAA;gBACAK,aAAA1D,KAAAqD,QAAA;;YAGA,IAAAM,OAAA3D,KAAAqD,QAAA,SACAO,QAAA5D,KAAAqD,QAAA,gBACAQ,QAAA7D,KAAAqD,QAAA;YAEAM,QAAA3D,KAAAkD,KAAAI;gBAAAK;gBACAC,SAAA5D,KAAAkD,KAAAI;gBAAAQ,eAAAF;gBACAC,SAAA7D,KAAAkD,KAAAI;gBAAAS,eAAAF;gBAEA5C,QAAA+C,QAAAhE,KAAAkD,KAAAI,KAAA,QAAArC,QAAA+C,OACA/C,QAAAgD,UAAAjE,KAAAkD,KAAAI,KAAA,UAAArC,QAAAgD;YAEA,IAAAC,WAAAlE,KAAAqD,QAAA;YACA,IAAAa,UAAA;gBAIA,SAFAC,QAAAlD,QAAAiC,KAAAkB,MAAA,MACAC,WAAA,IACAtE,IAAA,GAAAuE,KAAAH,MAAAI,QAAAxE,IAAAuE,IAAAvE,KAAA;oBACA,IAAAyE,OAAAL,MAAApE;oBACAC,KAAAkD,KAAAI,KAAA,QAAAe,WAAA,MAAAG,OAEAH,YADArE,KAAAkD,KAAAuB,UAAAC,QAAAR,WACA,OAAAM,OAEA,MAAAA;;gBAGAxE,KAAAkD,KAAAI,KAAA,QAAAe,SAAAM,UAAA;;YAKA,IAFA3E,KAAAuC,MAAAqC,KAAA5E,KAAAkD,OAEAZ,QAAA;gBACA,IAAAuC,YAAA7E,KAAAqD,QAAA;gBAEAf,OAAAgB;oBACAG,MAAAzD,KAAAqD,QAAA;oBACAyB,QAAA9E,KAAAqD,QAAA;oBACA0B,gBAAA/E,KAAAqD,QAAA;oBACAqB,OAAA1E,KAAAkD,KAAAuB,UAAAC,QAAA,IAAAG;oBACAG,QAAAhF,KAAAkD,KAAAuB,UAAAO,SAAA,IAAAH;oBAGAvC,OAAAa,KAAAC,aAAA,SAAApD,KAAAqD,QAAA,WAEApC,QAAA+C,QAAA1B,OAAAgB,KAAA,QAAArC,QAAA+C;gBACA/C,QAAAgD,UAAA3B,OAAAgB,KAAA,UAAArC,QAAAgD,SACAhD,QAAA6B,QAAAR,OAAAa,KAAA7C,KAAAW,QAAA6B;gBAEA9C,KAAAuC,MAAAqC,KAAAtC,SACAA,OAAA2C,aAAAjF,KAAAkD,OAEAlD,KAAAkD,KAAAI;oBACA4B,GAAA5C,OAAAmC,UAAAO,SAAA;oBAGAhF,KAAAmF;;;QAlFA,IAAAC,UAAAjF,iDAAA,IACAkF,WAAAD,QAAAC,UACAC,wBAAAF,QAAAE;;QAsFAlD,OAAAV,UAAA2B,UAAA,SAAAkC;YACA,IAAAvF,KAAAqC,OAAA;gBAGA,IAEAmD,MAFAC,OAAAzF,KAAAqC,MAAA,UAAArC,KAAAqC,MAAApB,QAAAsE,WAAAtC,QACAyC,OAAA1F,KAAAqC,MAAApB,QAAA,UAAAjB,KAAAqC,MAAApB,QAAA0E,QAAA3F,KAAA2C,YAAA4C,WAAAtC;gBAKA,OAHAjD,KAAAqC,MAAApB,QAAA2B,aAAA5C,KAAAqC,MAAApB,QAAA2B,UAAA5C,KAAA4C,eACA4C,OAAAxF,KAAAqC,MAAApB,QAAA2B,UAAA5C,KAAA4C,WAAA2C;gBAEAC,QAAAE,QAAAD;;WAGArD,OAAAV,UAAAyD,aAAA;YACAnF,KAAAuC,MAAAqD,UAAA,MAAA5F,KAAAqD,QAAA,sBAAArD,KAAAqD,QAAA;YAEArD,KAAA0E,QAAA1E,KAAAuC,MAAAkC,UAAAC,OACA1E,KAAAgF,SAAAhF,KAAAuC,MAAAkC,UAAAO;WAGA5C,OAAAV,UAAAmE,YAAA;YACA;gBAAArC,GAAAxD,KAAA8F,SAAA9F,KAAA0E,QAAA;gBACAQ,GAAAlF,KAAA+F,SAAA/F,KAAAgF,SAAA;;WAGA5C,OAAAV,UAAAoE,OAAA;YACA,OAAA9F,KAAAuC,MAAAkC,UAAAjB;WAGApB,OAAAV,UAAAqE,OAAA;YACA,OAAA/F,KAAAuC,MAAAkC,UAAAS;WAGA9C,OAAAV,UAAAsE,SAAA,SAAAxC;YACAxD,KAAAuC,MAAAqD,UAAA,OAAA5F,KAAA8F,SAAAtC,KAAA,MAAAxD,KAAA+F;WAGA3D,OAAAV,UAAAuE,OAAA,SAAAzC;YACAxD,KAAAuC,MAAAqD,UAAA,MAAApC,IAAA,MAAAxD,KAAA+F;WAGA3D,OAAAV,UAAAwE,SAAA,SAAAhB;YACAlF,KAAAuC,MAAAqD,UAAA,MAAA5F,KAAA8F,SAAA,OAAA9F,KAAA+F,SAAAb;WAGA9C,OAAAV,UAAAyE,OAAA,SAAAjB;YACAlF,KAAAuC,MAAAqD,UAAA,MAAA5F,KAAA8F,SAAA,MAAAZ;WAGA9C,OAAAV,UAAA0E,SAAA;YACA,IAAAlB,IAAAlF,KAAA+F,QACAvC,IAAAxD,KAAA8F,SAAA9F,KAAA0E,QAAA;YACA;gBAAAlB;gBAAA0B;;WAGA9C,OAAAV,UAAA2E,YAAA;YACA,IAAAnB,IAAAlF,KAAA+F,SAAA/F,KAAAgF,QACAxB,IAAAxD,KAAA8F,SAAA9F,KAAA0E,QAAA;YACA;gBAAAlB;gBAAA0B;;WAGA9C,OAAAV,UAAA4E,UAAA;YACA,IAAApB,IAAAlF,KAAA+F,SAAA/F,KAAAuC,MAAAkC,UAAAO,SAAA,GACAxB,IAAAxD,KAAA8F;YACA;gBAAAtC;gBAAA0B;;WAGA9C,OAAAV,UAAA6E,WAAA;YACA,IAAArB,IAAAlF,KAAA+F,SAAA/F,KAAAuC,MAAAkC,UAAAO,SAAA,GACAxB,IAAAxD,KAAA8F,SAAA9F,KAAAuC,MAAAkC,UAAAC;YACA;gBAAAlB;gBAAA0B;;WAGA9C,OAAAV,UAAA8E,SAAA;YACA,IAAAxG,KAAAgD,MAAA;gBAEA,IAAAyD,aAAAzG,KAAAqD,QAAA;gBAEA,gBAAArD,KAAA+C,gBAAA;oBAEA,IAAA2D,aAAA1G,KAAAuG;oBAEA,KAAAvG,KAAAgD,KAAA2D,cAAA;wBAEA3G,KAAAgD,KAAAmD,KAAAO,WAAAxB,IAAAlF,KAAAgD,KAAAgC,SAAA,IACAhF,KAAAgD,KAAAgD,OAAAhG,KAAAuC,MAAAkC,UAAAjB,IAAAxD,KAAA0E,QAAA+B;wBAEA,IAAAG,OAAA5G;yBACA,SAAA6G;4BAGA,SADAC,MADAC,kBAAA,GAEAhH,IAAA,GAAAiH,MAAAJ,KAAAvE,MAAAsD,QAAApB,QAAAxE,IAAAiH,KAAAjH,KAAA;gCACA+G,OAAAF,KAAAvE,MAAAsD,QAAA5F;gCAEA,IAAAkH,OAAAC,KAAAC,IAAAL,KAAAjB,YAAArC,IAAAoD,KAAA5D,KAAA6C,YAAArC;gCACA,IAAAsD,KAAAjB,YAAAX,IAAA0B,KAAA5D,KAAA6C,YAAAX,KAAA+B,QAAAL,KAAA5D,KAAA0B,QAAA;oCACAqC,kBAAA;oCACA;;;4BAIAA,mBACAH,KAAA5D,KAAAiD,KAAAa,KAAAhB,SAAAgB,KAAApC,QAAA+B,aACAI;6BAIA7G,KAAAgD,KAAA2D,gBAAA,GAEA3G,KAAAgD,KAAAwD;;uBAEA;oBACA,IAAAY,cAAApH,KAAAqG;oBAEArG,KAAAgD,KAAA2D,iBACA3G,KAAAgD,KAAAkD,OAAAlG,KAAA+F,SAAA/F,KAAAgF,SAAAyB;oBACAzG,KAAAgD,KAAAiD,KAAAmB,YAAA5D,IAAAxD,KAAAgD,KAAA0B,QAAA,IACA1E,KAAAgD,KAAA2D,gBAAA;oBAEA3G,KAAAgD,KAAAwD;;;WAMApE,OAAAV,UAAA2F,cAAA;YACArH,KAAAgD,SACAhD,KAAA+C,iBACA/C,KAAAsH,WAAAtH,KAAAgD,MAAA,IAAAhD,KAAA+C,kBAEA/C,KAAAsH,WAAAtH,KAAAgD;WAKAZ,OAAAV,UAAA4F,aAAA,SAAAhF,QAAAY,MAAAqE;YACAvH,KAAA0C,YAAA8E,QAAAlF,UAAA,KACAtC,KAAA0C,YAAAkC,KAAAtC;YAGA,IAoBAmF,MApBAjE,IAAAxD,KAAA6F,YAAArC,GACA0B,IAAAlF,KAAA6F,YAAAX,GACAwC,QAAA1H,KAAAuG,YACAoB,SAAA3H,KAAAqG,aACAuB,OAAA5H,KAAAsG,WAEAuB,UAAAvF,OAAAuD,YAAArC,GACAsE,UAAAxF,OAAAuD,YAAAX,GACA6C,YAAAzF,OAAA8D,UACA4B,cAAA1F,OAAAiE,YACA0B,aAAA3F,OAAAgE,WAEA4B,iBAAA1E,MAAAqE,SACAM,eAAAjD,MAAA4C,SACAM,UAAAlD,IAAA4C,SACAO,UAAAnD,IAAA4C,WAAA9H,SAAAsC,QACAgG,SAAA9E,IAAAqE,SACAU,UAAA/E,IAAAqE,SAEAW,OAAA,GAEA/B,aAAAzG,KAAAqD,QAAA,gBACAoF,WAAAzI,KAAAqD,QAAA;YAEA,IAAAkE,UAAA,aAAAA,WAAAW,mBAAAE,SAKA,IAAAb,UAAA,YAAAA,WAAAY,iBAAAI,SAKA,IAAAhB,UAAA,WAAAA,WAAAY,iBAAAG,QAKA,IAAAf,UAAA,YAAAA,WAAAW,mBAAAG,SAUA,IAAAd,UAAA,YAAAA,WAAAW,mBAAAE,SAUA,IAAAb,UAAA,aAAAA,WAAAe,QAmBA,IAAAf,UAAA,aAAAA,WAAAgB,SAWA,IAAAhB,UAAA,YAAAA,UAAAe,QACAb,OAAApC,SAAArF,KAAAqC,OAAAqF;gBACAlE,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAAwC,MAAAxC;;gBACA1B,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAhC,OACAlD,KAAA0I,cAAA,GACApG,OAAAqG,UAAA,GACAH,OAAAd,MAAAlE,IAAAiD,aAAA,QACA,IAAAc,UAAA,YAAAA,UAAAgB,SACAd,OAAApC,SAAArF,KAAAqC,OAAAqF;gBACAlE,GAAAuE,UAAAvE;gBAAA0B,GAAAwC,MAAAxC;;gBACA1B,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAhC,OACAlD,KAAA0I,cAAA,GACApG,OAAAqG,UAAA,GACAH,OAAAd,MAAAlE,IAAAiD,aAAA,QACA,IAAAc,UAAA,aAAAA,UAAAW,kBAAAG,SACAZ,OAAApC,SAAArF,KAAAqC,OAAAsF;gBACAnE,GAAAmE,OAAAnE;gBAAA0B,GAAAyC,OAAAzC,IAAAuB,aAAA;;gBACAjD,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAAyC,OAAAzC,IAAAuB,aAAA;;gBACAjD,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAhC,OACAlD,KAAA4I,eAAA,GACAtG,OAAAqG,UAAA,GACAH,OAAAb,OAAAnE,IAAAiD,aAAA,QACA,eAAAc,UAAAW,kBAAAG,SAAA;gBACA,IAAAQ,QAAAjB,KAAApE,IAAAiD,aAAA;gBACAwB,WAAAzE,IAAAoE,KAAApE,MACAqF,QAAAZ,WAAAzE,IAAAiD,aAAA,IAEAgB,OAAApC,SAAArF,KAAAqC,OAAAuF;oBACApE,GAAAqF;oBAAA3D,GAAA0C,KAAA1C;;oBACA1B,GAAAqF;oBAAA3D,GAAA6C,UAAA7C,IAAAuB,aAAA;;oBACAjD,GAAAuE,UAAAvE;oBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;oBACAjD,GAAAuE,UAAAvE;oBAAA0B,GAAA6C,UAAA7C;qBACAhC,OACAlD,KAAA8I,aAAA,GACAxG,OAAAqG,UAAA,GACAH,OAAAZ,KAAApE;mBACA,WAAA+D,WACAE,OAAApC,SAAArF,KAAAqC,OAAAuF;gBACApE,GAAAuE,UAAAvE,KAAAoE,KAAApE,IAAAuE,UAAAvE,KAAA;gBAAA0B,GAAA0C,KAAA1C;;gBACA1B,GAAAuE,UAAAvE,KAAAoE,KAAApE,IAAAuE,UAAAvE,KAAA;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAhC,OACAlD,KAAA8I,aAAA,GACAxG,OAAAqG,UAAA,GACAH,OAAAZ,KAAApE,SA9DAiE,OAAApC,SAAArF,KAAAqC,OAAAsF;gBACAnE,GAAAmE,OAAAnE;gBAAA0B,GAAAyC,OAAAzC,IAAAuB,aAAA;;gBACAjD,GAAAmE,OAAAnE,KAAAmE,OAAAnE,IAAAuE,UAAAvE,KAAA;gBAAA0B,GAAAyC,OAAAzC,IAAAuB,aAAA;;gBACAjD,GAAAmE,OAAAnE,KAAAmE,OAAAnE,IAAAuE,UAAAvE,KAAA;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAhC,OACAlD,KAAA4I,eAAA,GACAtG,OAAAqG,UAAA,GACAH,OAAAb,OAAAnE,KAAAmE,OAAAnE,IAAAuE,UAAAvE,KAAA,QA3BAiE,OADAzH,KAAA+I,WAAAV,UACAhD,SAAArF,KAAAqC,OAAAsF;gBACAnE,GAAAmE,OAAAnE;gBAAA0B,GAAAyC,OAAAzC,IAAAuB,aAAA;;gBACAjD,GAAAmE,OAAAnE,KAAAmE,OAAAnE,IAAAuE,UAAAvE,KAAA;gBAAA0B,GAAAyC,OAAAzC,IAAAuB,aAAA;;gBACAjD,GAAAmE,OAAAnE,KAAAmE,OAAAnE,IAAAuE,UAAAvE,KAAA;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAhC,QAEAmC,SAAArF,KAAAqC,OAAAsF;gBACAnE,GAAAmE,OAAAnE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAhC,OAEAlD,KAAA4I,eAAA,GACAtG,OAAAqG,UAAA,GACAH,OAAAb,OAAAnE,KAAAmE,OAAAnE,IAAAuE,UAAAvE,KAAA,QA3BAiE,OAAApC,SAAArF,KAAAqC,OAAAqF;gBACAlE,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAAwC,MAAAxC;;gBACA1B,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAhC,OACAlD,KAAA0I,cAAA,GACApG,OAAAqG,UAAA,GACAH,OAAAd,MAAAlE,IAAAiD,aAAA,QAlBAgB,OAAApC,SAAArF,KAAAqC,OAAAqF;gBACAlE,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAAwC,MAAAxC;;gBACA1B,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAhC,OACAlD,KAAA0I,cAAA,GACApG,OAAAqG,UAAA,GACAH,OAAAd,MAAAlE,IAAAiD,aAAA,QAbAgB,OAAApC,SAAArF,KAAAqC,OAAAuF,MAAAI,aAAA9E;YACAlD,KAAA8I,aAAA,GACAxG,OAAA0G,YAAA,GACAR,OAAAR,YAAAxE,QARAiE,OAAApC,SAAArF,KAAAqC,OAAAqF,OAAAO,YAAA/E;YACAlD,KAAA0I,cAAA,GACApG,OAAAyG,WAAA,GACAP,OAAAP,WAAAzE,QARAiE,OAAApC,SAAArF,KAAAqC,OAAAsF,QAAAI,WAAA7E;YACAlD,KAAA4I,eAAA,GACAtG,OAAAqG,UAAA,GACAH,OAAAb,OAAAnE;YAyHA;YAJAxD,KAAA6C,UAAAP,OAAAQ,QAAA2E,QACAA,KAAAnE,KAAAtD,KAAA6C,UAAAP,OAAAQ,OAGA2E,MAAA;gBACA,SAAAwB,IAAA,GAAAC,OAAAlJ,KAAAqC,MAAA8G,MAAA5E,QAAA0E,IAAAC,MAAAD,KAOA,SALAjC,KADAoC,YAAApJ,KAAAqC,MAAA8G,MAAAF,IAGAI,QAAAD,UAAA9F,KAAA,SACAgG,QAAA7B,KAAAnE,KAAA,SAEAiG,KAAA,GAAAC,OAAAH,MAAA9E,SAAA,GAAAgF,KAAAC,MAAAD,MAAA;oBACA,IAAAE;oBACAA,QAAA7E,OAAA,KAAAyE,MAAAE,IAAA,IAAAF,MAAAE,IAAA,OACAE,QAAA7E,OAAA,KAAAyE,MAAAE,KAAA,OAAAF,MAAAE,KAAA;oBAOA,SALAG,eAAAD,QAAA,OACAE,eAAAF,QAAA,OACAG,aAAAH,QAAA,OACAI,aAAAJ,QAAA,OAEAK,KAAA,GAAAC,QAAAT,MAAA/E,SAAA,GAAAuF,KAAAC,OAAAD,MAAA;wBACA,IAAAE;wBACAA,YAAApF,OAAA,KAAA0E,MAAAQ,IAAA,IAAAR,MAAAQ,IAAA,OACAE,YAAApF,OAAA,KAAA0E,MAAAQ,KAAA,OAAAR,MAAAQ,KAAA;wBAEA,IAAAG,eAAAD,YAAA,OACAE,eAAAF,YAAA,OACAG,aAAAH,YAAA,OACAI,aAAAJ,YAAA,OAEAK,MAAA/E,sBAAAoE,cAAAC,cAAAC,YAAAC,YAAAI,cAAAC,cAAAC,YAAAC;wBACA,IAAAC,IAAAC,WAAAD,IAAAE,SAAA;4BAEA,IAAAC;4BACAN,iBAAAE,aACAH,eAAAE,cACAK,eAAA,KAAAH,IAAA7G,IAAA,IAAAiF,UAAAyB;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAH,IAAA7G,IAAA,IAAAiF,UAAAyB,cAAAG,IAAA7G,GAAA0G,eAAA,IAAAzB,UAAA4B,IAAA7G,IAAA,IAAAiF,UAAAyB;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACA/C,KAAAnE,KAAA,QAAAgG,WAEAkB,eAAA,KAAAH,IAAA7G,IAAA,IAAAiF,UAAAyB;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAH,IAAA7G,IAAA,IAAAiF,UAAAyB,cAAAG,IAAA7G,GAAA0G,eAAA,IAAAzB,UAAA4B,IAAA7G,IAAA,IAAAiF,UAAAyB;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACA/C,KAAAnE,KAAA,QAAAgG,UAGAY,eAAAE,cACAI,eAAA,KAAAP,cAAAI,IAAAnF,IAAA,IAAAuD;4BACAa,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAP,cAAAI,IAAAnF,IAAA,IAAAuD,UAAAwB,eAAA,IAAAxB,UAAA4B,IAAAnF,GAAA+E,cAAAI,IAAAnF,IAAA,IAAAuD;4BACAa,MAAAmB,OAAAX,KAAA,MAAAU,aACA/C,KAAAnE,KAAA,QAAAgG,WAEAkB,eAAA,KAAAP,cAAAI,IAAAnF,IAAA,IAAAuD;4BACAa,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAP,cAAAI,IAAAnF,IAAA,IAAAuD,UAAAwB,eAAA,IAAAxB,UAAA4B,IAAAnF,GAAA+E,cAAAI,IAAAnF,IAAA,IAAAuD;4BACAa,MAAAmB,OAAAX,KAAA,MAAAU,aACA/C,KAAAnE,KAAA,QAAAgG,SAIAQ,MAAA,GACA9C,OAAA;;;;gBAMAhH,KAAAqC,MAAA8G,MAAAvE,KAAA6C;;cAGAzH,KAAAqC,MAAAqI,gBAAA1K,KAAAqC,MAAAqI,gBAAAlC,OAAAxI,KAAAqC,MAAAqI,kBACA1K,KAAAqC,MAAAqI,eAAAlC;WAIA9I,OAAAD,UAAA2C;;;;;;IJoJM,SAAU1C,QAAQD;QK1lBxB,SAAAkL,SAAAtI,OAAAuI,UAAAC;YACA,IAAA9K,GAAAiH,KACA8D,OAAA;YACA,KAAA/K,IAAA,GAAAiH,MAAA,IAAA6D,OAAAtG,SAAA,GAAAxE,IAAAiH,KAAAjH,KAAA,GACA+K,QAAA,QAAA/K,IAAA,SAAAA,IAAA;YAEA,IAAAgL,eAAAH,SAAApH,GAAAoH,SAAA1F;YACA,KAAAnF,IAAA,GAAAiH,MAAA6D,OAAAtG,QAAAxE,IAAAiH,KAAAjH,KACAgL,WAAAnG,KAAAiG,OAAA9K,GAAAyD,IACAuH,WAAAnG,KAAAiG,OAAA9K,GAAAmF;YAEA,IAAA5C,SAAAD,MAAAG,MAAAsI,WAAAC;YACAzI,OAAAgB,KAAA,UAAAjB,MAAApB,QAAA,mBACAqB,OAAAgB,KAAA,gBAAAjB,MAAApB,QAAA;YAEA,IAAA0C,OAAAtB,MAAApB,QAAA0C,MACAC,QAAAvB,MAAApB,QAAA,gBACA4C,QAAAxB,MAAApB,QAAA;YAMA,OAJA0C,QAAArB,OAAAgB;gBAAAK;gBACAC,SAAAtB,OAAAgB;gBAAAQ,eAAAF;gBACAC,SAAAvB,OAAAgB;gBAAAS,eAAAF;gBAEAvB;;QAGA,SAAA+C,SAAAhD,OAAA2I,MAAAC,IAAA/H;YACA,IAAAnD,GAAAiH;YAEA,qBAAAxF,OAAAE,UAAAwJ,SAAA1K,KAAAyK,QACAA;YAGA,IAAAH,OAAA;YACA,KAAA/K,IAAA,GAAAiH,MAAA,IAAAiE,GAAA1G,SAAA,GAAAxE,IAAAiH,KAAAjH,KAAA,GACA+K,QAAA,QAAA/K,IAAA,SAAAA,IAAA;YAEA,IAAAgL,eAAAC,KAAAxH,GAAAwH,KAAA9F;YACA,KAAAnF,IAAA,GAAAiH,MAAAiE,GAAA1G,QAAAxE,IAAAiH,KAAAjH,KACAgL,WAAAnG,KAAAqG,GAAAlL,GAAAyD,IACAuH,WAAAnG,KAAAqG,GAAAlL,GAAAmF;YAGA,IAAAuC,OAAApF,MAAAG,MAAAsI,WAAAC;YACAtD,KAAAnE;gBACAwB,QAAAzC,MAAApB,QAAA;gBACA8D,gBAAA1C,MAAApB,QAAA;gBACAkK,aAAA9I,MAAApB,QAAA;;YAGA,IAAA0C,OAAAtB,MAAApB,QAAA0C,MACAC,QAAAvB,MAAApB,QAAA,gBACA4C,QAAAxB,MAAApB,QAAA;YAMA,IAJA0C,QAAA8D,KAAAnE;gBAAAK;gBACAC,SAAA6D,KAAAnE;gBAAAQ,eAAAF;gBACAC,SAAA4D,KAAAnE;gBAAAS,eAAAF;gBAEAX,MAAA;gBAEA,IAAAkI,cAAA,GAEAC,WAAAhJ,MAAAG,MAAAU,KAAA,MAAAA,OAEAoI,gBAAA,GACAC,UAAAN,GAAA;gBAEAD,KAAA9F,MAAAqG,QAAArG,MACAoG,gBAAA;gBAGA,IAAA9H,IAAA,GACA0B,IAAA;gBAEAkG,cAEA5H,IADAwH,KAAAxH,IAAA+H,QAAA/H,IACAwH,KAAAxH,KAAAwH,KAAAxH,IAAA+H,QAAA/H,KAAA,IAEA+H,QAAA/H,KAAA+H,QAAA/H,IAAAwH,KAAAxH,KAAA;gBAIA0B,IADA8F,KAAA9F,IAAAqG,QAAArG,IACA8F,KAAA9F,KAAA8F,KAAA9F,IAAAqG,QAAArG,KAAA,IAEAqG,QAAArG,KAAAqG,QAAArG,IAAA8F,KAAA9F,KAAA;gBAGAoG,gBACA9H,KAAA6H,SAAA5G,UAAAC,QAAA,GACAQ,KAAA7C,MAAApB,QAAA,mBAEAuC,KAAAnB,MAAApB,QAAA;gBACAiE,KAAAmG,SAAA5G,UAAAO,SAAA,OAGAxB,IAAAwH,KAAAxH,GACA0B,IAAA8F,KAAA9F,GAEAoG,gBACA9H,KAAAnB,MAAApB,QAAA;gBACAiE,KAAA7C,MAAApB,QAAA,mBAEAuC,KAAAnB,MAAApB,QAAA,oBACAiE,KAAA7C,MAAApB,QAAA;gBAIAoK,SAAA/H;oBACAC,eAAA;oBACAG,aAAArB,MAAApB,QAAA;oBACAwC,MAAApB,MAAApB,QAAA;oBACAuC;oBACA0B;oBAGAvB,QAAA0H,SAAA/H;oBAAAK;oBACAC,SAAAyH,SAAA/H;oBAAAQ,eAAAF;oBACAC,SAAAwH,SAAA/H;oBAAAS,eAAAF;;;YAGA,OAAA4D;;QAGA,SAAAnC,sBAAAkG,aAAAC,aAAAC,WAAAC,WAAAC,aAAAC,aAAAC,WAAAC;;YAEA,IAAAC,aAAAlM,GAAAmM,GAAAC,YAAAC,YAAAC;gBACA5I,GAAA;gBACA0B,GAAA;gBACAoF,UAAA;gBACAC,UAAA;;;;;;;;;;YAGA,OADAyB,eAAAD,YAAAF,gBAAAH,YAAAF,gBAAAM,YAAAF,gBAAAD,YAAAF;YACA,MAAAO,cACAI,UAEAtM,IAAA2L,cAAAI,aACAI,IAAAT,cAAAI;YACAM,cAAAJ,YAAAF,eAAA9L,KAAAiM,YAAAF,eAAAI,GACAE,cAAAT,YAAAF,eAAA1L,KAAA6L,YAAAF,eAAAQ;YACAnM,IAAAoM,aAAAF,aACAC,IAAAE,aAAAH,aAGAI,OAAA5I,IAAAgI,cAAA1L,KAAA4L,YAAAF;YACAY,OAAAlH,IAAAuG,cAAA3L,KAAA6L,YAAAF,cAOA3L,IAAA,KAAAA,IAAA,MACAsM,OAAA9B,WAAA;YAGA2B,IAAA,KAAAA,IAAA,MACAG,OAAA7B,WAAA,IAGA6B;;QAGA1M,OAAAD;YACAkL;YACAtF;YACAC;;;;;;;ILqmBM,SAAU5F,QAAQD,SAASU;QMlwBjC,SAAAS,MAAAyL;YAsHA,SAAAC,SAAAC;gBACA,IAAAC,aAAAD,EAAA/E,QAAA,UACAiF,WAAAF,EAAA/E,QAAA;gBACA,OAAAgF,cAAA,KAAAC,YAAA,IACAF,EAAA5H,UAAA6H,YAAAC,YAEA;;YAGA,SAAAC,aAAAH;gBACA,IAAAC,aAAAD,EAAA/E,QAAA,UACAiF,WAAAF,EAAA/E,QAAA;gBACA,OAAAgF,cAAA,KAAAC,YAAA,IACAF,EAAA5H,UAAA6H,YAAAC,YAEA;;YAGA,SAAAE,UAAAJ;gBACA,IAAAC,aAAAD,EAAA/E,QAAA,UACAiF,WAAAF,EAAA/E,QAAA;gBACA,OAAAgF,cAAA,KAAAC,YAAA,IACApK,MAAAsD,QAAA4G,EAAA5H,UAAA,GAAA6H,aAAA,MAEAnK,MAAAsD,QAAA4G;;YAGA,SAAAK,YAAAL;gBACA,IAAAvJ,OAAA,QACAwJ,aAAAD,EAAA/E,QAAA,UACAiF,WAAAF,EAAA/E,QAAA;gBASA,OARAgF,cAAA,KAAAC,YAAA,MACAzJ,OAAA6J,SAAAlI,UAAA6H,YAAAC;gBACAzJ,KAAAwE,QAAA,YACA,UAAAxE,QAAA,SAAAA,SACAA,OAAA,WAAAA;gBAIAA;;YA5JAqJ,iBAAA,IACAA,cAAAS;YA4FA,SA1FAzK;gBACAsD;gBACAoH,OAAA;gBACAC,SAAA,SAAAC,WAAAhM;oBAWA,SAAAiM,iBAAAX;wBACA,IAAAY,YAAAZ,EAAAzJ,MACA,OAAAqK,YAAAZ,EAAAzJ;wBAGA,QAAAyJ,EAAA5J;0BACA;4BACAwK,YAAAZ,EAAAzJ,OAAA,IAAAsK,MAAAC,SAAAd;4BACA;;0BACA;4BACAY,YAAAZ,EAAAzJ,OAAA,IAAAwK,IAAAD,SAAAd;4BACA;;0BACA;4BACAY,YAAAZ,EAAAzJ,OAAA,IAAAyK,UAAAF,SAAAd;4BACA;;0BACA;4BACAY,YAAAZ,EAAAzJ,OAAA,IAAA0K,YAAAH,SAAAd;4BACA;;0BACA;4BACAY,YAAAZ,EAAAzJ,OAAA,IAAA2K,WAAAJ,SAAAd;4BACA;;0BACA;4BACAY,YAAAZ,EAAAzJ,OAAA,IAAA4K,UAAAL,SAAAd;4BACA;;0BACA;4BACA,WAAAoB,MAAA;;wBAGA,OAAAR,YAAAZ,EAAAzJ;;oBAtCA,IAAA8D,OAAA5G;oBAEAA,KAAAqN,WACArN,KAAAqN,QAAAO;oBAGA,IAAAP,UAAA,IAAAxM,UAAAoM,WAAAhM;oBACAjB,KAAAqN;oBACA,IAAAF;qBAiCA,SAAAU,eAAAtB,GAAAuB,UAAAC;wBACA,IAAAC,WAAAd,iBAAAX;wBAiBA,OAfA3F,KAAAmG,UAAAR,IACAc,QAAAY,UAAAD,YACAF,YAAAC,SAAAD,SAAAI,WACAJ,oBAAA,aACAC,KAAAI,QAAA5B,KACAuB,SAAAK,IAAAH;wBAEAD,KAAAK,OAAA7B,KACAuB,SAAAM,GAAAJ,aAGAF,SAAAO,KAAAL,YAIAA,SAAAE,SACAF,YAGAA,oBAAA,aACAzB,EAAA4B,OACAN,eAAAtB,EAAA4B,KAAAH,UAAAzB;wBAEAA,EAAA6B,MACAP,eAAAtB,EAAA6B,IAAAJ,UAAAzB,MAEAA,EAAAvJ,QACA6K,eAAAtB,EAAAvJ,MAAAgL,UAAAzB;wBAGAyB;sBACAhO,KAAA+M,QAEAM,QAAA7G;;gBAEAoH,OAAA;oBACA5N,KAAAqN,QAAAO;;eAIAzE,YACAmF,YAAA,GACAC,KAAA,GAAAC,QAAAnC,MAAA9H,QAAAgK,KAAAC,OAAAD,MACA,aAAAlC,MAAAkC,OAAA,SAAAlC,MAAAkC,KAAA;gBACA,IAAAE,QAAApC,MAAA1H,UAAA2J,WAAAC;gBACAD,YAAAC,KAAA,GACApF,MAAAvE,KAAA6J,MAAAC,QAAA;;YAIAJ,YAAAjC,MAAA9H,UACA4E,MAAAvE,KAAAyH,MAAAsC,OAAAL;YAGA,SAAArF,IAAA,GAAAjC,MAAAmC,MAAA5E,QAAA0E,IAAAjC,OAAA;gBACA,IAAA4H,cAAAzF,MAAAF;gBAEA2F,YAAApH,QAAA,aAAAoH,YAAApH,QAAA,aAAAoH,YAAApH,QAAA,aACA2B,MAAAF,IAAA,aAAA2F;gBACAzF,MAAAsB,OAAAxB,GAAA,IACAjC,SAEAiC;;YA8CA,MAAAE,MAAA5E,SAAA;gBACA,IAAAkD,OAAA0B,MAAAsB,OAAA,SAAAqC;gBAEA,IAAArF,KAAAD,QAAA;;oBAEA,IAAAqH,QAAApH,KAAArD,MAAA,OACA9B;wBACAQ,KAAA+L,MAAA,GAAAH,QAAA;wBACA/L,YAAAkM,MAAA;wBACA3L,MAAA;wBACAc,MAAA;wBACAC,QAAA;wBACArB,WAAA;wBACAC;wBACAiM;uBAIAA,SAAAD,MAAA,GAAAE,MAAA;oBACA,IAAAD,iBAAAvK,SAAA,GAEA,SADAyK,UAAAF,OAAA,GAAA1K,MAAA,MACArE,IAAA,GAAAA,IAAAiP,QAAAzK,QAAAxE,KAAA;wBACA,IAAAkP,QAAAD,QAAA,GAAA5K,MAAA;wBACA,KAAA6K,MAAA1K,WACAjC,OAAAwM,OAAAG,MAAA,MAAAA,MAAA;;oBAKA,IAAAC;;oBAuBA,IArBA5M,OAAAK,WAAA6E,QAAA,eACA0H,MAAA5M,OAAAK,WAAAyB,MAAA;oBACA9B,OAAAK,aAAAuM,IAAArI,SACAvE,OAAAY,OAAAgM,IAAAC,KAAA,QAGA7M,OAAAY,QAAAZ,OAAAY,KAAAsE,QAAA,cACA0H,MAAA5M,OAAAY,KAAAkB,MAAA;oBACA9B,OAAAY,OAAAgM,IAAArI,SACAvE,OAAA0B,OAAAkL,IAAAC,KAAA,SACA7M,OAAAK,WAAA6E,QAAA,eACA0H,MAAA5M,OAAAK,WAAAyB,MAAA;oBACA9B,OAAAK,aAAAuM,IAAArI,SACAvE,OAAA0B,OAAAkL,IAAAC,KAAA,QAGA7M,OAAAK,WAAA6E,QAAA,eACAlF,OAAAK,aAAAL,OAAAK,WAAAyB,MAAA;oBAIA9B,OAAA0B,MAAA;wBACA,IAAAwI,aAAAlK,OAAA0B,KAAAwD,QAAA,UACAiF,WAAAnK,OAAA0B,KAAAwD,QAAA;wBACAgF,cAAA,KAAAC,YAAA,MACAnK,OAAA2B,SAAA3B,OAAA0B,KAAAW,UAAA6H,YAAAC;wBACAnK,OAAA0B,OAAA1B,OAAA0B,KAAAW,UAAA,GAAA6H,aAAA;;;;oBAMA,IAAAlK,OAAAY,QACAZ,OAAAY,KAAAsE,QAAA;wBACA,IAAA4H,cAAA9M,OAAAY,KAAAkB,MAAA;wBACA9B,OAAAM,YAAAwM,YAAAC,MAAAvC,QACAxK,OAAAY,OAAAkM,YAAAD,KAAA;;;oBAKA9M,MAAAsD,QAAArD,OAAAQ,OAAAR;uBAEA,IAAAmF,KAAAD,QAAA,YAGA,SADA8H,cAAA7H,KAAArD,MAAA,OACArE,IAAA,GAAAwP,OAAAD,YAAA/K,QAAAxE,IAAAwP,MAAAxP,KAAA;oBACA,IAAA8M,WAAAyC,YAAAvP,IACAyP,UAAA9C,aAAAG;oBAEA,WAAA2C,WAAA,YAAAA;oBAEA3C,oBAAA6B,QAAA,gBACA7B,oBAAA6B,QAAA;oBAGA,IAAAe,WAAA9C,UAAAE,WACA7J,OAAA4J,YAAAC,WAEA6C,YAAA;oBACA,IAAA1M,KAAAwE,QAAA;wBACA,IAAAmI,UAAA3M,KAAAoB,MAAA;wBACApB,OAAA2M,QAAA,IACAD,YAAAC,QAAA,GAAA7C;;oBAOA,IAJAzK,MAAA0K,UACA1K,MAAA0K,QAAA0C,WAGA1P,IAAA,IAAAwP,MAAA;wBACA,IAAAK,WAAAN,YAAAvP,IAAA;wBACA0P,SAAAzM,QAAA2J,UAAAiD,WACAH,SAAA,eAAAzM,QAAA0M;wBACAA,YAAA;;uBAGA,IAAAjI,KAAAD,QAAA,YAIA,SADAqI,mBAAApI,KAAArD,MAAA,OACArE,IAAA,GAAAwP,OAAAM,iBAAAtL,QAAAxE,IAAAwP,MAAAxP,KAEA,IAAAA,IAAA,KAAAwP,MAAA;oBACA,IAAAO,UAAAnD,UAAAkD,iBAAA9P,KACA6P,WAAAjD,UAAAkD,iBAAA9P,IAAA;oBAEA+P,QAAA,UAAAF,SAAA9M,OAAAiN,KAAAnP,MAAA0L,SAAAuD,iBAAA9P,IAAA;;;YAMA,OAAAsC;;QApSA,IAAAxB,YAAAV,6CAAA,IACAiN,QAAAjN,oDAAA,KACAmN,MAAAnN,kDAAA,IACAoN,YAAApN,wDAAA,KACAqN,cAAArN,0DAAA,KACAsN,aAAAtN,yDAAA,KACAuN,YAAAvN,wDAAA;QAiSAT,OAAAD,UAAAmB;;;;;;INoxBM,SAAUlB,QAAQD,SAASU;QOtjCjC,SAAAuN,UAAArL,OAAApB;YACAA,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,UACAjB,KAAAgQ,aAAAhQ,KAAAqD,QAAA;YACArD,KAAAiQ,gBAAA,UACAjQ,KAAAkQ,eAAA,SACAlQ,KAAA8O,SAAA7N,QAAA6N;YACA7N,QAAAkN,OAAAlN,QAAAkP,iBAAAlP,QAAAmN,OAAAnN,QAAAmP,eACA,YAAAnP,QAAAkP,iBACAnQ,KAAAkQ,eAAA;YACAlQ,KAAAiQ,gBAAA,YAEAjQ,KAAAkQ,eAAA,SACAlQ,KAAAiQ,gBAAA,YAEAhP,QAAAkN,QAAAlN,QAAAkP,iBAAAlP,QAAAmN,MAAAnN,QAAAmP,eACA,YAAAnP,QAAAmP,gBACApQ,KAAAiQ,gBAAA;YACAjQ,KAAAkQ,eAAA,YAEAlQ,KAAAiQ,gBAAA,SACAjQ,KAAAkQ,eAAA,aAGAlQ,KAAAiQ,gBAAA;YACAjQ,KAAAkQ,eAAA,UAGAlQ,KAAAiQ,gBAAAjQ,KAAAiQ,iBAAA;YACAjQ,KAAAkQ,eAAAlQ,KAAAkQ,gBAAA,SAEAlQ,KAAAkD,KAAAI;gBACAE,GAAA,IAAAxD,KAAAgQ;;YAGA,IAAAtL,QAAA1E,KAAAkD,KAAAuB,UAAAC,QAAA,IAAA1E,KAAAgQ;YACAtL,iBAAA;YACA,IAAAM,SAAAhF,KAAAkD,KAAAuB,UAAAO,SAAA,IAAAhF,KAAAgQ;YACAhL,mBAAA,GACAA,SAAAkC,KAAAmJ,IAAA,KAAA3L,OAAAM;YACA,IAAAsL,SAAA5L,QAAA,GACA6L,SAAAvL,SAAA;YAEAhF,KAAAkD,KAAAI;gBACAE,GAAA8M,SAAAtQ,KAAAgQ,aAAA;;YAGA,IAAAjD;gBAAAvJ,GAAA8M;gBAAApL,GAAAqL;eACA1F;gBACArH,GAAA8M,SAAA5L,QAAA;gBAAAQ,GAAAqL,SAAAvL,SAAA;;gBACAxB,GAAA8M,SAAA5L,QAAA,IAAAA,QAAA;gBAAAQ,GAAAqL,SAAAvL,SAAA,IAAAA,SAAA;;gBACAxB,GAAA8M,SAAA5L,QAAA,IAAAA;gBAAAQ,GAAAqL,SAAAvL,SAAA;;gBACAxB,GAAA8M,SAAA5L,QAAA,IAAAA,QAAA;gBAAAQ,GAAAqL,SAAAvL,SAAA,IAAAA,SAAA;;gBACAxB,GAAA8M,SAAA5L,QAAA;gBAAAQ,GAAAqL,SAAAvL,SAAA;iBAGA1C,SAAAqI,SAAAtI,OAAA0K,OAAAlC;YAEAvI,OAAAgB;gBACAwB,QAAA9E,KAAAqD,QAAA;gBACA0B,gBAAA/E,KAAAqD,QAAA;gBACAI,MAAAzD,KAAAqD,QAAA;gBAEApC,QAAA+C,QAAA1B,OAAAgB,KAAA,QAAArC,QAAA+C,OACA/C,QAAAgD,UAAA3B,OAAAgB,KAAA,UAAArC,QAAAgD;YACAhD,QAAA6B,QAAAR,OAAAa,KAAA7C,KAAAW,QAAA6B,MACAR,OAAAa,KAAAC,aAAA,SAAApD,KAAAqD,QAAA;YAEArD,KAAAkD,KAAAI;gBACA4B,GAAA5C,OAAAmC,UAAAO,SAAA;gBAGAhF,KAAAuC,MAAAqC,KAAAtC,SACAA,OAAA2C,aAAAjF,KAAAkD,OAEAlD,KAAAmF;;QAhFA,IAAA/C,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC,UACAiD,UAAAjF,iDAAA,IACAwK,WAAAvF,QAAAuF;QA+EAxI,SAAAuL,WAAAtL,SAEAsL,UAAAhM,UAAA8E,SAAA;YAEAxG,KAAAiQ,kBACAjQ,UAAAiQ,gBAAA,aAAAjQ,KAAAwQ;YAGAxQ,KAAAkQ,iBACAlQ,UAAAkQ,eAAA,aAAAlQ,KAAAyQ;YAGA,IAAAhK,aAAAzG,KAAAqD,QAAA;YAEA,IAAArD,KAAA0Q,eAAA;gBACA,IAAAtJ,cAAApH,KAAAqG;gBAEArG,KAAA0Q,cAAA/J,iBACA3G,KAAA0Q,cAAAxK,OAAAlG,KAAA+F,SAAA/F,KAAAgF,SAAAyB;gBACAzG,KAAA0Q,cAAAzK,KAAAmB,YAAA5D,IAAAxD,KAAA0Q,cAAAhM,QAAA,IACA1E,KAAA0Q,cAAA/J,gBAAA;gBAEA3G,KAAA0Q,cAAAlK;;YAIA,IAAAxG,KAAA2Q,cAAA;gBACA,IAAAjK,aAAA1G,KAAAuG;gBAEA,KAAAvG,KAAA2Q,aAAAhK,cAAA;oBAEA3G,KAAA2Q,aAAAxK,KAAAO,WAAAxB,IAAAlF,KAAA2Q,aAAA3L,SAAA,IACAhF,KAAA2Q,aAAA3K,OAAAhG,KAAAuC,MAAAkC,UAAAjB,IAAAxD,KAAA0E,QAAA+B;oBAEA,IAAAG,OAAA5G;qBACA,SAAA6G;wBAGA,SADAC,MADAC,kBAAA,GAEAhH,IAAA,GAAAiH,MAAAJ,KAAAvE,MAAAsD,QAAApB,QAAAxE,IAAAiH,KAAAjH,KAGA,IAFA+G,OAAAF,KAAAvE,MAAAsD,QAAA5F;yBAEA6G,KAAAkI,OAAA,0BAAAlI,KAAAkI,OAAA;4BACA,IAAA7H,OAAAC,KAAAC,IAAAL,KAAAjB,YAAArC,IAAAoD,KAAA+J,aAAA9K,YAAArC;4BACA,IAAAsD,KAAAjB,YAAAX,IAAA0B,KAAA+J,aAAA9K,YAAAX,KAAA+B,QAAAL,KAAA+J,aAAAjM,QAAA;gCACAqC,kBAAA;gCACA;;;wBAKAA,mBACAH,KAAA+J,aAAA1K,KAAAa,KAAAhB,SAAAgB,KAAApC,QAAA+B;wBACAI;yBAIA7G,KAAA2Q,aAAAhK,gBAAA,GAEA3G,KAAA2Q,aAAAnK;;;WAKAkH,UAAAhM,UAAA2F,cAAA;YACArH,KAAAwQ,cACAxQ,KAAAsH,WAAAtH,KAAAwQ,YAAAxQ,KAAAqD,QAAA,aAAArD,KAAAiQ;YAGAjQ,KAAAyQ,aACAzQ,KAAAsH,WAAAtH,KAAAyQ,WAAAzQ,KAAAqD,QAAA,YAAArD,KAAAkQ;WAIAxQ,OAAAD,UAAAiO;;;;;;IPqkCM,SAAUhO,QAAQD,SAASU;QQ3tCjC,SAAAU,UAAAoM,WAAAhM;YACAA,yBAEAjB,KAAAwC,QAAA,IAAAoO,QAAA3D,YAEAjN,KAAAiB,UAAAiB,SAAAjB,SAAAC;YAEAlB,KAAA2F,cACA3F,KAAAmJ,YACAnJ,KAAA+M,QAAA;;QAdA,IAAA6D,UAAAzQ,mCAAA,KACA+B,WAAA/B,+CAAA,GAAA+B,UACAhB,iBAAAf,gDAAA,IACAuN,YAAAvN,wDAAA;QAcAU,UAAAa,UAAAmP,SAAA,SAAAvO;YACAtC,KAAA2F,QAAA6B,QAAAlF,YAAA,KACAtC,KAAA2F,QAAAf,KAAAtC;YAGA,IAAAwO,YAAA9Q;YAyBA,OAvBAsC,kBAAA,aACAA,OAAA6L,MAAA,SAAA4C;gBAKA,OAJAzO,OAAAkO,aAAAO,YACAzO,OAAAmO,cACAnO,OAAA4L,UAAA;gBAEA4C,UAAAD,OAAAE;eAEAzO,OAAA8L,KAAA,SAAA2C;gBAKA,OAJAzO,OAAAmO,YAAAM,YACAzO,OAAAkO,eACAlO,OAAA4L,UAAA;gBAEA4C,UAAAD,OAAAE;iBAGAzO,OAAA+L,OAAA,SAAA0C;gBAGA,OAFAzO,OAAAU,OAAA+N,YACAzO,OAAA4L,UAAA,GACA4C,UAAAD,OAAAE;eAIAzO;WAGAzB,UAAAa,UAAAuM,YAAA,SAAA3L;YAEA,OADAtC,KAAA+M,QAAAzK,QACAtC,KAAA6Q,OAAAvO;WAGAzB,UAAAa,UAAA8E,SAAA;YACA,IAQAlE,QACAmF,MATAvD,WAAA,GACA8M,YAAA,GACAjR,IAAA,GACAiH,MAAA,GACAwB,OAAA,GACAyI,OAAA,GACAC,OAAA,GACAC,OAAA;YAIA,KAAApR,IAAA,GAAAiH,MAAAhH,KAAA2F,QAAApB,QAAAxE,IAAAiH,KAAAjH,KACAuC,SAAAtC,KAAA2F,QAAA5F,IACAuC,OAAAoC,QAAAR,aACAA,WAAA5B,OAAAoC;YAEApC,OAAA0C,SAAAgM,cACAA,YAAA1O,OAAA0C;YAIA,KAAAjF,IAAA,GAAAiH,MAAAhH,KAAA2F,QAAApB,QAAAxE,IAAAiH,KAAAjH,KACAuC,SAAAtC,KAAA2F,QAAA5F,IACAuC,OAAA0D,OAAAhG,KAAAiB,QAAAuC,KAAAU,WAAA5B,OAAAoC,SAAA,IAAA1E,KAAAiB,QAAA;YACAqB,OAAA4D,OAAAlG,KAAAiB,QAAAiE,KAAA8L,YAAA1O,OAAA0C,UAAA,IAAAhF,KAAAiB,QAAA;;;;;YASA,KANAjB,KAAA+M,MAAAvG,UAMAzG,IAAA,GAAAiH,MAAAhH,KAAA2F,QAAApB,QAAAxE,IAAAiH,KAAAjH,KACAuC,SAAAtC,KAAA2F,QAAA5F;YACAuC,OAAA+E;YAGAmB,OAAAxI,KAAA0K;YAEA,IAAAlH,GACA0B;YAEA,KAAAnF,IAAA,GAAAiH,MAAAhH,KAAA2F,QAAApB,QAAAxE,IAAAiH,KAAAjH,KACAuC,SAAAtC,KAAA2F,QAAA5F,IACAyD,IAAAlB,OAAAwD,SAAAxD,OAAAoC;YACAQ,IAAA5C,OAAAyD,SAAAzD,OAAA0C,QACAxB,IAAAgF,SACAA,OAAAhF,IAEA0B,IAAA+L,SACAA,OAAA/L;YAIA,KAAAnF,IAAA,GAAAiH,MAAAhH,KAAAmJ,MAAA5E,QAAAxE,IAAAiH,KAAAjH,KAAA;gBACA0H,OAAAzH,KAAAmJ,MAAApJ,GAAA0E,WACAjB,IAAAiE,KAAAjE,GACA0B,IAAAuC,KAAAvC;gBACA,IAAAkM,KAAA3J,KAAA2J,IACAC,KAAA5J,KAAA4J;gBACA7N,IAAA0N,SACAA,OAAA1N,IAEA0B,IAAAiM,SACAA,OAAAjM,IAEAkM,KAAA5I,SACAA,OAAA4I,KAEAC,KAAAJ,SACAA,OAAAI;;YAIA,IAAAC,QAAAtR,KAAAiB,QAAA,OACAsQ,YAAAvR,KAAAiB,QAAA;YAEAiQ,OAAA,MAAAA,QAAAK,YACAJ,OAAA,MAAAA,QAAAI;YAEA,IAAA7M,QAAA8D,OAAA+I,YAAAL,MACAlM,SAAAiM,OAAAM,YAAAJ;YAEAnR,KAAAwC,MAAAgP,QAAA9M,QAAA4M,OAAAtM,SAAAsM,QACAtR,KAAAwC,MAAAiP,WAAAP,MAAAC,MAAAzM,OAAAM,SAAA;WAGAnE,UAAAa,UAAAkM,QAAA;YACA,IAAA5N,KAAAwC,OAAA;gBACA,IAAAkP,WAAA1R,KAAAwC,MAAAmP;gBACAD,SAAAE,WAAAC,YAAAH;;WAIAhS,OAAAD,UAAAoB;;;;;;IR0uCM,SAAUnB,QAAQD;;QSh4CxBC,OAAAD;YACA+D,GAAA;YACA0B,GAAA;YACA4M,cAAA;YACAC,eAAA;YACAC,eAAA;YACAtO,aAAA;YACAuO,cAAA;;;;YAIAC,cAAA;YACAC,iBAAA;YACA1O,MAAA;YACA2O,YAAA;YACAC,WAAA;YACAlH,aAAA;YACAmH,OAAA;YACAhB,OAAA;YACA3L;gBACAoH;gBACAwF;gBACAC;gBACAC;gBACAC;gBACAC;;;;;;;;ITm5CM,SAAUjT,QAAQD;;QU56CxBmT,MAAAlR,UAAA8F,YACAoL,MAAAlR,UAAA8F,UAAA,SAAAqL;YACA;YACA,aAAA7S,MACA,UAAA8S;YAEA,IAAAC,IAAAvR,OAAAxB,OACAgH,MAAA+L,EAAAxO,WAAA;YACA,UAAAyC,KACA;YAEA,IAAAgM,IAAA;YASA,IARAC,UAAA1O,SAAA,MACAyO,IAAAE,OAAAD,UAAA,KACAD;YACAA,IAAA,IACA,MAAAA,UAAAG,SAAAH,OAAAG,WACAH,SAAA,WAAA9L,KAAAkM,MAAAlM,KAAAC,IAAA6L;YAGAA,KAAAhM,KACA;YAGA,KADA,IAAAqM,IAAAL,KAAA,IAAAA,IAAA9L,KAAAmJ,IAAArJ,MAAAE,KAAAC,IAAA6L,IAAA,IACAK,IAAArM,KAAAqM,KACA,IAAAA,KAAAN,OAAAM,OAAAR,eACA,OAAAQ;YAGA;;QAKAT,MAAAlR,UAAA4R,gBACAV,MAAAlR,UAAA4R,cAAA,SAAAT;YACA;YACA,aAAA7S,MACA,UAAA8S;YAEA,IAAAC,IAAAvR,OAAAxB,OACAgH,MAAA+L,EAAAxO,WAAA;YACA,UAAAyC,KACA;YAEA,IAAAgM,IAAAhM;YACAiM,UAAA1O,SAAA,MACAyO,IAAAE,OAAAD,UAAA,KACAD,SACAA,IAAA,IACA,MAAAA,UAAA,SAAAA,OAAA,WACAA,SAAA,WAAA9L,KAAAkM,MAAAlM,KAAAC,IAAA6L;YAIA,KADA,IAAAK,IAAAL,KAAA,IAAA9L,KAAAqM,IAAAP,GAAAhM,MAAA,KAAAA,MAAAE,KAAAC,IAAA6L,IACAK,KAAA,GAAAA,KACA,IAAAA,KAAAN,OAAAM,OAAAR,eACA,OAAAQ;YAGA;YAIAG,OAAA9R,UAAAoL,SACA0G,OAAA9R,UAAAoL,OAAA;YACA,OAAA9M,KAAA0O,QAAA;;;;;;;IVw7CM,SAAUhP,QAAQD,SAASU;QWx/CjC,SAAAmN,IAAAjL,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAAiR,KAAA;YACAxS,yBACAA,QAAAiC,OAAAjC,QAAAiC,QAAA,OACAd,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB;;QAPA,IAAAF,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAQAA,SAAAmL,KAAAlL,SAEA1C,OAAAD,UAAA6N;;;;;;IXqgDM,SAAU5N,QAAQD,SAASU;QY3gDjC,SAAAqN,YAAAnL,OAAApB;YACAA,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,UACAjB,KAAAgQ,aAAAhQ,KAAAqD,QAAA;YAEArD,KAAAkD,KAAAI;gBACAE,GAAA,IAAAxD,KAAAgQ;;YAGA,IAAAtL,QAAA1E,KAAAkD,KAAAuB,UAAAC,QAAA,IAAA1E,KAAAgQ,YACAhL,SAAAhF,KAAAkD,KAAAuB,UAAAO,SAAA,IAAAhF,KAAAgQ,YACAM,SAAAtQ,KAAAgQ,YACAO,SAAAvL,SAAA,GAEA+H;gBAAAvJ,GAAA8M;gBAAApL,GAAAqL;eACA1F;gBACArH,GAAA8M,SAAAtQ,KAAAgQ;gBAAA9K,GAAAF;;gBACAxB,GAAA8M,SAAAtQ,KAAAgQ,aAAAtL;gBAAAQ,GAAAF;;gBACAxB,GAAA8M,SAAAtQ,KAAAgQ,aAAAtL,QAAA,IAAA1E,KAAAgQ;gBAAA9K,GAAA;;gBACA1B,GAAA8M,SAAAtQ,KAAAgQ,aAAA,IAAAhQ,KAAAgQ;gBAAA9K,GAAA;;gBACA1B,GAAA8M;gBAAApL,GAAAqL;iBAGAjO,SAAAqI,SAAAtI,OAAA0K,OAAAlC;YAEAvI,OAAAgB;gBACAwB,QAAA9E,KAAAqD,QAAA;gBACA0B,gBAAA/E,KAAAqD,QAAA;gBACAI,MAAAzD,KAAAqD,QAAA;gBAEApC,QAAA+C,QAAA1B,OAAAgB,KAAA,QAAArC,QAAA+C,OACA/C,QAAAgD,UAAA3B,OAAAgB,KAAA,UAAArC,QAAAgD;YACAhD,QAAA6B,QAAAR,OAAAa,KAAA7C,KAAAW,QAAA6B,MACAR,OAAAa,KAAAC,aAAA,SAAApD,KAAAqD,QAAA;YAEArD,KAAAkD,KAAAI;gBACA4B,GAAA5C,OAAAmC,UAAAO,SAAA;gBAGAhF,KAAAuC,MAAAqC,KAAAtC,SACAA,OAAA2C,aAAAjF,KAAAkD,OAEAlD,KAAAmF;;QA/CA,IAAA/C,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC,UACAiD,UAAAjF,iDAAA,IACAwK,WAAAvF,QAAAuF;QA8CAxI,SAAAqL,aAAApL,SAEAoL,YAAA9L,UAAA4E,UAAA;YACA,IAAApB,IAAAlF,KAAA+F,SAAA/F,KAAAuC,MAAAkC,UAAAO,SAAA,GACAxB,IAAAxD,KAAA8F,SAAA9F,KAAAgQ;YACA;gBAAAxM;gBAAA0B;;WAGAsI,YAAA9L,UAAA6E,WAAA;YACA,IAAArB,IAAAlF,KAAA+F,SAAA/F,KAAAuC,MAAAkC,UAAAO,SAAA,GACAxB,IAAAxD,KAAA8F,SAAA9F,KAAAuC,MAAAkC,UAAAC,QAAA1E,KAAAgQ;YACA;gBAAAxM;gBAAA0B;;WAGAxF,OAAAD,UAAA+N;;;;;;IZ0hDM,SAAU9N,QAAQD,SAASU;QatlDjC,SAAAoN,UAAAlL,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAAiR,KAAA;YACAxS,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB;;QANA,IAAAF,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAOAA,SAAAoL,WAAAnL,SAEA1C,OAAAD,UAAA8N;;;;;;IbmmDM,SAAU7N,QAAQD,SAASU;Qc1mDjC,SAAAiN,MAAA/K,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAAiR,KAAA;YACAxS,yBACAA,QAAAiC,OAAAjC,QAAAiC,QAAA,SACAd,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB;;QAPA,IAAAF,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAQAA,SAAAiL,OAAAhL,SAEA1C,OAAAD,UAAA2N;;;;;;Id8oDM,SAAU1N,QAAQD,SAASU;QetpDjC,SAAAsN,WAAApL,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAAiR,KAAA;YACAxS,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB,SAEAA,OAAAgB;gBACAoB,OAAA1E,KAAAkD,KAAAuB,UAAAC,QAAA,IAAA1E,KAAAqD,QAAA;gBAGArD,KAAAkD,KAAAI;gBACAE,GAAA,IAAAxD,KAAAqD,QAAA;;YAGA,IAAAqQ,YAAArR,MAAAG,MAAAiR,KAAA;YACAC,UAAApQ;gBACAE,GAAAxD,KAAAqD,QAAA;gBACAyB,QAAA9E,KAAAqD,QAAA;gBACA0B,gBAAA/E,KAAAqD,QAAA;gBACAqB,OAAA1E,KAAAkD,KAAAuB,UAAAC,QAAA,IAAA1E,KAAAqD,QAAA;gBACA2B,QAAAhF,KAAAkD,KAAAuB,UAAAO,SAAA,IAAAhF,KAAAqD,QAAA;gBACAI,MAAAzD,KAAAqD,QAAA;gBAEApC,QAAA6B,QAAA4Q,UAAAvQ,KAAA7C,KAAAW,QAAA6B,MAAA;YAEA,IAAAa,OAAA3D,KAAAqD,QAAA,SACAO,QAAA5D,KAAAqD,QAAA,gBACAQ,QAAA7D,KAAAqD,QAAA;YAEAM,QAAA+P,UAAApQ;gBAAAK;gBACAC,SAAA8P,UAAApQ;gBAAAQ,eAAAF;gBACAC,SAAA6P,UAAApQ;gBAAAS,eAAAF;gBAEA5C,QAAA+C,QAAA0P,UAAApQ,KAAA,QAAArC,QAAA+C,OACA/C,QAAAgD,UAAAyP,UAAApQ,KAAA,UAAArC,QAAAgD;YACAjE,KAAAuC,MAAAqC,KAAA8O,YACAA,UAAAzO,aAAAjF,KAAAkD,OAEAlD,KAAAmF;;QAxCA,IAAA/C,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAyCAA,SAAAsL,YAAArL,SAEA1C,OAAAD,UAAAgO;;;;;;IfmqDM,SAAU/N,QAAQD,SAASU;QgB/sDjC,0BAAAwT,QAAA;YACA,IAAA/S,QAAAT,6CAAA;aACA,SAAAyT;gBACAA,EAAAC,GAAA/C,YAAA,SAAA7P;oBACA,OAAAjB,KAAA8T,KAAA;wBACA,IAAAC,QAAAH,EAAA5T,OACAqC,QAAAzB,MAAAmT,MAAA7Q;wBACA6Q,MAAAC,KAAA,KACA3R,MAAA2K,QAAAhN,MAAAiB;;;cAGA0S;;;;;;;IhB0tDM,SAAUjU,QAAQD;QiBruDxBC,OAAAD,UAAAQ","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\r\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\r\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\r\n\t\r\n\tvar FlowChart = {\r\n\t\tparse: parse\r\n\t};\r\n\t\r\n\tif (typeof window !== 'undefined') {\r\n\t\twindow.flowchart = FlowChart;\r\n\t}\r\n\t\r\n\tmodule.exports = FlowChart;\r\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\r\n\t if (!options || typeof options === 'function') {\r\n\t return defaultOptions;\r\n\t }\r\n\t\r\n\t var merged = {};\r\n\t for (var attrname in defaultOptions) {\r\n\t merged[attrname] = defaultOptions[attrname];\r\n\t }\r\n\t\r\n\t for (attrname in options) {\r\n\t if (options[attrname]) {\r\n\t if (typeof merged[attrname] === 'object') {\r\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\r\n\t } else {\r\n\t merged[attrname] = options[attrname];\r\n\t }\r\n\t }\r\n\t }\r\n\t return merged;\r\n\t}\r\n\t\r\n\tfunction _inherits(ctor, superCtor) {\r\n\t if (typeof(Object.create) === 'function') {\r\n\t // implementation from standard node.js 'util' module\r\n\t ctor.super_ = superCtor;\r\n\t ctor.prototype = Object.create(superCtor.prototype, {\r\n\t constructor: {\r\n\t value: ctor,\r\n\t enumerable: false,\r\n\t writable: true,\r\n\t configurable: true\r\n\t }\r\n\t });\r\n\t } else {\r\n\t // old school shim for old browsers\r\n\t ctor.super_ = superCtor;\r\n\t var TempCtor = function () {};\r\n\t TempCtor.prototype = superCtor.prototype;\r\n\t ctor.prototype = new TempCtor();\r\n\t ctor.prototype.constructor = ctor;\r\n\t }\r\n\t}\r\n\t\r\n\t// move dependent functions to a container so that\r\n\t// they can be overriden easier in no jquery environment (node.js)\r\n\tmodule.exports = {\r\n\t defaults: _defaults,\r\n\t inherits: _inherits\r\n\t};\r\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);\r\n\tvar drawLine = drawAPI.drawLine;\r\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\r\n\t\r\n\tfunction Symbol(chart, options, symbol) {\r\n\t this.chart = chart;\r\n\t this.group = this.chart.paper.set();\r\n\t this.symbol = symbol;\r\n\t this.connectedTo = [];\r\n\t this.symbolType = options.symbolType;\r\n\t this.flowstate = (options.flowstate || 'future');\r\n\t this.lineStyle = (options.lineStyle || {});\r\n\t this.key = (options.key || '');\r\n\t\r\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\r\n\t\r\n\t this.text = this.chart.paper.text(0, 0, options.text);\r\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\r\n\t if (options.key) { this.text.node.id = options.key + 't'; }\r\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\r\n\t\r\n\t this.text.attr({\r\n\t 'text-anchor': 'start',\r\n\t 'x' : this.getAttr('text-margin'),\r\n\t 'fill' : this.getAttr('font-color'),\r\n\t 'font-size' : this.getAttr('font-size')\r\n\t });\r\n\t\r\n\t var font = this.getAttr('font');\r\n\t var fontF = this.getAttr('font-family');\r\n\t var fontW = this.getAttr('font-weight');\r\n\t\r\n\t if (font) this.text.attr({ 'font': font });\r\n\t if (fontF) this.text.attr({ 'font-family': fontF });\r\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\r\n\t\r\n\t if (options.link) { this.text.attr('href', options.link); }\r\n\t if (options.target) { this.text.attr('target', options.target); }\r\n\t\r\n\t var maxWidth = this.getAttr('maxWidth');\r\n\t if (maxWidth) {\r\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\r\n\t var words = options.text.split(' ');\r\n\t var tempText = \"\";\r\n\t for (var i=0, ii=words.length; i maxWidth) {\r\n\t tempText += \"\\n\" + word;\r\n\t } else {\r\n\t tempText += \" \" + word;\r\n\t }\r\n\t }\r\n\t this.text.attr(\"text\", tempText.substring(1));\r\n\t }\r\n\t\r\n\t this.group.push(this.text);\r\n\t\r\n\t if (symbol) {\r\n\t var tmpMargin = this.getAttr('text-margin');\r\n\t\r\n\t symbol.attr({\r\n\t 'fill' : this.getAttr('fill'),\r\n\t 'stroke' : this.getAttr('element-color'),\r\n\t 'stroke-width' : this.getAttr('line-width'),\r\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\r\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\r\n\t });\r\n\t\r\n\t symbol.node.setAttribute('class', this.getAttr('class'));\r\n\t\r\n\t if (options.link) { symbol.attr('href', options.link); }\r\n\t if (options.target) { symbol.attr('target', options.target); }\r\n\t if (options.key) { symbol.node.id = options.key; }\r\n\t\r\n\t this.group.push(symbol);\r\n\t symbol.insertBefore(this.text);\r\n\t\r\n\t this.text.attr({\r\n\t 'y': symbol.getBBox().height/2\r\n\t });\r\n\t\r\n\t this.initialize();\r\n\t }\r\n\t\r\n\t}\r\n\t\r\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\r\n\tSymbol.prototype.getAttr = function(attName) {\r\n\t if (!this.chart) {\r\n\t return undefined;\r\n\t }\r\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\r\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\r\n\t var opt1;\r\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\r\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\r\n\t }\r\n\t return (opt1 || opt2 || opt3);\r\n\t};\r\n\t\r\n\tSymbol.prototype.initialize = function() {\r\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\r\n\t\r\n\t this.width = this.group.getBBox().width;\r\n\t this.height = this.group.getBBox().height;\r\n\t};\r\n\t\r\n\tSymbol.prototype.getCenter = function() {\r\n\t return {x: this.getX() + this.width/2,\r\n\t y: this.getY() + this.height/2};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getX = function() {\r\n\t return this.group.getBBox().x;\r\n\t};\r\n\t\r\n\tSymbol.prototype.getY = function() {\r\n\t return this.group.getBBox().y;\r\n\t};\r\n\t\r\n\tSymbol.prototype.shiftX = function(x) {\r\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\r\n\t};\r\n\t\r\n\tSymbol.prototype.setX = function(x) {\r\n\t this.group.transform('t' + x + ',' + this.getY());\r\n\t};\r\n\t\r\n\tSymbol.prototype.shiftY = function(y) {\r\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\r\n\t};\r\n\t\r\n\tSymbol.prototype.setY = function(y) {\r\n\t this.group.transform('t' + this.getX() + ',' + y);\r\n\t};\r\n\t\r\n\tSymbol.prototype.getTop = function() {\r\n\t var y = this.getY();\r\n\t var x = this.getX() + this.width/2;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getBottom = function() {\r\n\t var y = this.getY() + this.height;\r\n\t var x = this.getX() + this.width/2;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getLeft = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX();\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getRight = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX() + this.group.getBBox().width;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.render = function() {\r\n\t if (this.next) {\r\n\t\r\n\t var lineLength = this.getAttr('line-length');\r\n\t\r\n\t if (this.next_direction === 'right') {\r\n\t\r\n\t var rightPoint = this.getRight();\r\n\t\r\n\t if (!this.next.isPositioned) {\r\n\t\r\n\t this.next.setY(rightPoint.y - this.next.height/2);\r\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\t\r\n\t var self = this;\r\n\t (function shift() {\r\n\t var hasSymbolUnder = false;\r\n\t var symb;\r\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n\t symb = self.chart.symbols[i];\r\n\t\r\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\r\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\r\n\t hasSymbolUnder = true;\r\n\t break;\r\n\t }\r\n\t }\r\n\t\r\n\t if (hasSymbolUnder) {\r\n\t self.next.setX(symb.getX() + symb.width + lineLength);\r\n\t shift();\r\n\t }\r\n\t })();\r\n\t\r\n\t this.next.isPositioned = true;\r\n\t\r\n\t this.next.render();\r\n\t }\r\n\t } else {\r\n\t var bottomPoint = this.getBottom();\r\n\t\r\n\t if (!this.next.isPositioned) {\r\n\t this.next.shiftY(this.getY() + this.height + lineLength);\r\n\t this.next.setX(bottomPoint.x - this.next.width/2);\r\n\t this.next.isPositioned = true;\r\n\t\r\n\t this.next.render();\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\t\r\n\tSymbol.prototype.renderLines = function() {\r\n\t if (this.next) {\r\n\t if (this.next_direction) {\r\n\t this.drawLineTo(this.next, '', this.next_direction);\r\n\t } else {\r\n\t this.drawLineTo(this.next);\r\n\t }\r\n\t }\r\n\t};\r\n\t\r\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\r\n\t if (this.connectedTo.indexOf(symbol) < 0) {\r\n\t this.connectedTo.push(symbol);\r\n\t }\r\n\t\r\n\t var x = this.getCenter().x,\r\n\t y = this.getCenter().y,\r\n\t right = this.getRight(),\r\n\t bottom = this.getBottom(),\r\n\t left = this.getLeft();\r\n\t\r\n\t var symbolX = symbol.getCenter().x,\r\n\t symbolY = symbol.getCenter().y,\r\n\t symbolTop = symbol.getTop(),\r\n\t symbolRight = symbol.getRight(),\r\n\t symbolLeft = symbol.getLeft();\r\n\t\r\n\t var isOnSameColumn = x === symbolX,\r\n\t isOnSameLine = y === symbolY,\r\n\t isUnder = y < symbolY,\r\n\t isUpper = y > symbolY || this === symbol,\r\n\t isLeft = x > symbolX,\r\n\t isRight = x < symbolX;\r\n\t\r\n\t var maxX = 0,\r\n\t line,\r\n\t lineLength = this.getAttr('line-length'),\r\n\t lineWith = this.getAttr('line-width');\r\n\t\r\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\r\n\t line = drawLine(this.chart, bottom, symbolTop, text);\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x;\r\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\r\n\t line = drawLine(this.chart, right, symbolLeft, text);\r\n\t this.rightStart = true;\r\n\t symbol.leftEnd = true;\r\n\t maxX = symbolLeft.x;\r\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\r\n\t line = drawLine(this.chart, left, symbolRight, text);\r\n\t this.leftStart = true;\r\n\t symbol.rightEnd = true;\r\n\t maxX = symbolRight.x;\r\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: right.x + lineLength/2, y: right.y},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: right.x + lineLength/2, y: right.y},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\r\n\t if (this.leftEnd && isUpper) {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t } else {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t }\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n\t } else if ((!origin || origin === 'bottom') && isRight) {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n\t } else if ((origin && origin === 'right') && isLeft) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: right.x + lineLength/2, y: right.y},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((origin && origin === 'right') && isRight) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: symbolTop.x, y: right.y},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: bottom.y + lineLength/2},\r\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x + lineLength/2;\r\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\r\n\t var diffX = left.x - lineLength/2;\r\n\t if (symbolLeft.x < left.x) {\r\n\t diffX = symbolLeft.x - lineLength/2;\r\n\t }\r\n\t line = drawLine(this.chart, left, [\r\n\t {x: diffX, y: left.y},\r\n\t {x: diffX, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.leftStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = left.x;\r\n\t } else if ((origin === 'left')) {\r\n\t line = drawLine(this.chart, left, [\r\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\r\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.leftStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = left.x;\r\n\t }\r\n\t\r\n\t //update line style\r\n\t if (this.lineStyle[symbol.key] && line){\r\n\t line.attr( this.lineStyle[symbol.key]);\r\n\t }\r\n\t\r\n\t if (line) {\r\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\r\n\t var otherLine = this.chart.lines[l];\r\n\t var len;\r\n\t\r\n\t var ePath = otherLine.attr('path'),\r\n\t lPath = line.attr('path');\r\n\t\r\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\r\n\t var newPath = [];\r\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\r\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\r\n\t\r\n\t var line1_from_x = newPath[0][1];\r\n\t var line1_from_y = newPath[0][2];\r\n\t var line1_to_x = newPath[1][1];\r\n\t var line1_to_y = newPath[1][2];\r\n\t\r\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\r\n\t var newLinePath = [];\r\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\r\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\r\n\t\r\n\t var line2_from_x = newLinePath[0][1];\r\n\t var line2_from_y = newLinePath[0][2];\r\n\t var line2_to_x = newLinePath[1][1];\r\n\t var line2_to_y = newLinePath[1][2];\r\n\t\r\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);\r\n\t if (res.onLine1 && res.onLine2) {\r\n\t\r\n\t var newSegment;\r\n\t if (line2_from_y === line2_to_y) {\r\n\t if (line2_from_x > line2_to_x) {\r\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t } else {\r\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t }\r\n\t } else {\r\n\t if (line2_from_y > line2_to_y) {\r\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t } else {\r\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t }\r\n\t }\r\n\t\r\n\t lP += 2;\r\n\t len += 2;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t this.chart.lines.push(line);\r\n\t }\r\n\t\r\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\r\n\t this.chart.maxXFromLine = maxX;\r\n\t }\r\n\t};\r\n\t\r\n\tmodule.exports = Symbol;\r\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\r\n\t var i, len;\r\n\t var path = 'M{0},{1}';\r\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\r\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\r\n\t }\r\n\t var pathValues = [location.x, location.y];\r\n\t for (i = 0, len = points.length; i < len; i++) {\r\n\t pathValues.push(points[i].x);\r\n\t pathValues.push(points[i].y);\r\n\t }\r\n\t var symbol = chart.paper.path(path, pathValues);\r\n\t symbol.attr('stroke', chart.options['element-color']);\r\n\t symbol.attr('stroke-width', chart.options['line-width']);\r\n\t\r\n\t var font = chart.options.font;\r\n\t var fontF = chart.options['font-family'];\r\n\t var fontW = chart.options['font-weight'];\r\n\t\r\n\t if (font) symbol.attr({ 'font': font });\r\n\t if (fontF) symbol.attr({ 'font-family': fontF });\r\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\r\n\t\r\n\t return symbol;\r\n\t}\r\n\t\r\n\tfunction drawLine(chart, from, to, text) {\r\n\t var i, len;\r\n\t\r\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\r\n\t to = [to];\r\n\t }\r\n\t\r\n\t var path = 'M{0},{1}';\r\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\r\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\r\n\t }\r\n\t var pathValues = [from.x, from.y];\r\n\t for (i = 0, len = to.length; i < len; i++) {\r\n\t pathValues.push(to[i].x);\r\n\t pathValues.push(to[i].y);\r\n\t }\r\n\t\r\n\t var line = chart.paper.path(path, pathValues);\r\n\t line.attr({\r\n\t stroke: chart.options['line-color'],\r\n\t 'stroke-width': chart.options['line-width'],\r\n\t 'arrow-end': chart.options['arrow-end']\r\n\t });\r\n\t\r\n\t var font = chart.options.font;\r\n\t var fontF = chart.options['font-family'];\r\n\t var fontW = chart.options['font-weight'];\r\n\t\r\n\t if (font) line.attr({ 'font': font });\r\n\t if (fontF) line.attr({ 'font-family': fontF });\r\n\t if (fontW) line.attr({ 'font-weight': fontW });\r\n\t\r\n\t if (text) {\r\n\t\r\n\t var centerText = false;\r\n\t\r\n\t var textPath = chart.paper.text(0, 0, text);\r\n\t\r\n\t var isHorizontal = false;\r\n\t var firstTo = to[0];\r\n\t\r\n\t if (from.y === firstTo.y) {\r\n\t isHorizontal = true;\r\n\t }\r\n\t\r\n\t var x = 0,\r\n\t y = 0;\r\n\t\r\n\t if (centerText) {\r\n\t if (from.x > firstTo.x) {\r\n\t x = from.x - (from.x - firstTo.x)/2;\r\n\t } else {\r\n\t x = firstTo.x - (firstTo.x - from.x)/2;\r\n\t }\r\n\t\r\n\t if (from.y > firstTo.y) {\r\n\t y = from.y - (from.y - firstTo.y)/2;\r\n\t } else {\r\n\t y = firstTo.y - (firstTo.y - from.y)/2;\r\n\t }\r\n\t\r\n\t if (isHorizontal) {\r\n\t x -= textPath.getBBox().width/2;\r\n\t y -= chart.options['text-margin'];\r\n\t } else {\r\n\t x += chart.options['text-margin'];\r\n\t y -= textPath.getBBox().height/2;\r\n\t }\r\n\t } else {\r\n\t x = from.x;\r\n\t y = from.y;\r\n\t\r\n\t if (isHorizontal) {\r\n\t x += chart.options['text-margin']/2;\r\n\t y -= chart.options['text-margin'];\r\n\t } else {\r\n\t x += chart.options['text-margin']/2;\r\n\t y += chart.options['text-margin'];\r\n\t }\r\n\t }\r\n\t\r\n\t textPath.attr({\r\n\t 'text-anchor': 'start',\r\n\t 'font-size': chart.options['font-size'],\r\n\t 'fill': chart.options['font-color'],\r\n\t x: x,\r\n\t y: y\r\n\t });\r\n\t\r\n\t if (font) textPath.attr({ 'font': font });\r\n\t if (fontF) textPath.attr({ 'font-family': fontF });\r\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\r\n\t }\r\n\t\r\n\t return line;\r\n\t}\r\n\t\r\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\r\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\r\n\t var denominator, a, b, numerator1, numerator2, result = {\r\n\t x: null,\r\n\t y: null,\r\n\t onLine1: false,\r\n\t onLine2: false\r\n\t };\r\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\r\n\t if (denominator === 0) {\r\n\t return result;\r\n\t }\r\n\t a = line1StartY - line2StartY;\r\n\t b = line1StartX - line2StartX;\r\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\r\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\r\n\t a = numerator1 / denominator;\r\n\t b = numerator2 / denominator;\r\n\t\r\n\t // if we cast these lines infinitely in both directions, they intersect here:\r\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\r\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\r\n\t /*\r\n\t // it is worth noting that this should be the same as:\r\n\t x = line2StartX + (b * (line2EndX - line2StartX));\r\n\t y = line2StartX + (b * (line2EndY - line2StartY));\r\n\t */\r\n\t // if line1 is a segment and line2 is infinite, they intersect if:\r\n\t if (a > 0 && a < 1) {\r\n\t result.onLine1 = true;\r\n\t }\r\n\t // if line2 is a segment and line1 is infinite, they intersect if:\r\n\t if (b > 0 && b < 1) {\r\n\t result.onLine2 = true;\r\n\t }\r\n\t // if line1 and line2 are segments, they intersect if both of the above are true\r\n\t return result;\r\n\t}\r\n\t\r\n\tmodule.exports = {\r\n\t\tdrawPath: drawPath,\r\n\t\tdrawLine: drawLine,\r\n\t\tcheckLineIntersection: checkLineIntersection\r\n\t};\r\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\r\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\r\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\r\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\r\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\r\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\r\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\r\n\t\r\n\tfunction parse(input) {\r\n\t input = input || '';\r\n\t input = input.trim();\r\n\t\r\n\t var chart = {\r\n\t symbols: {},\r\n\t start: null,\r\n\t drawSVG: function(container, options) {\r\n\t var self = this;\r\n\t\r\n\t if (this.diagram) {\r\n\t this.diagram.clean();\r\n\t }\r\n\t\r\n\t var diagram = new FlowChart(container, options);\r\n\t this.diagram = diagram;\r\n\t var dispSymbols = {};\r\n\t\r\n\t function getDisplaySymbol(s) {\r\n\t if (dispSymbols[s.key]) {\r\n\t return dispSymbols[s.key];\r\n\t }\r\n\t\r\n\t switch (s.symbolType) {\r\n\t case 'start':\r\n\t dispSymbols[s.key] = new Start(diagram, s);\r\n\t break;\r\n\t case 'end':\r\n\t dispSymbols[s.key] = new End(diagram, s);\r\n\t break;\r\n\t case 'operation':\r\n\t dispSymbols[s.key] = new Operation(diagram, s);\r\n\t break;\r\n\t case 'inputoutput':\r\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \r\n\t break;\r\n\t case 'subroutine':\r\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\r\n\t break;\r\n\t case 'condition':\r\n\t dispSymbols[s.key] = new Condition(diagram, s);\r\n\t break;\r\n\t default:\r\n\t return new Error('Wrong symbol type!');\r\n\t }\r\n\t\r\n\t return dispSymbols[s.key];\r\n\t }\r\n\t\r\n\t (function constructChart(s, prevDisp, prev) {\r\n\t var dispSymb = getDisplaySymbol(s);\r\n\t\r\n\t if (self.start === s) {\r\n\t diagram.startWith(dispSymb);\r\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\r\n\t if (prevDisp instanceof(Condition)) {\r\n\t if (prev.yes === s) {\r\n\t prevDisp.yes(dispSymb);\r\n\t }\r\n\t if (prev.no === s) {\r\n\t prevDisp.no(dispSymb);\r\n\t }\r\n\t } else {\r\n\t prevDisp.then(dispSymb);\r\n\t }\r\n\t }\r\n\t\r\n\t if (dispSymb.pathOk) {\r\n\t return dispSymb;\r\n\t }\r\n\t\r\n\t if (dispSymb instanceof(Condition)) {\r\n\t if (s.yes) {\r\n\t constructChart(s.yes, dispSymb, s);\r\n\t }\r\n\t if (s.no) {\r\n\t constructChart(s.no, dispSymb, s);\r\n\t }\r\n\t } else if (s.next) {\r\n\t constructChart(s.next, dispSymb, s);\r\n\t }\r\n\t\r\n\t return dispSymb;\r\n\t })(this.start);\r\n\t\r\n\t diagram.render();\r\n\t },\r\n\t clean: function() {\r\n\t this.diagram.clean();\r\n\t }\r\n\t };\r\n\t\r\n\t var lines = [];\r\n\t var prevBreak = 0;\r\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\r\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\r\n\t var line0 = input.substring(prevBreak, i0);\r\n\t prevBreak = i0 + 1;\r\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\r\n\t }\r\n\t }\r\n\t\r\n\t if(prevBreak < input.length) {\r\n\t lines.push(input.substr(prevBreak));\r\n\t }\r\n\t\r\n\t for (var l = 1, len = lines.length; l < len;) {\r\n\t var currentLine = lines[l];\r\n\t\r\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\r\n\t lines[l - 1] += '\\n' + currentLine;\r\n\t lines.splice(l, 1);\r\n\t len--;\r\n\t } else {\r\n\t l++;\r\n\t }\r\n\t }\r\n\t\r\n\t function getStyle(s){\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t return s.substring(startIndex,endIndex);\r\n\t }\r\n\t return '{}';\r\n\t }\r\n\t\r\n\t function getSymbValue(s){\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t return s.substring(startIndex,endIndex);\r\n\t }\r\n\t return '';\r\n\t }\r\n\t\r\n\t function getSymbol(s) {\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \r\n\t }\r\n\t return chart.symbols[s];\r\n\t }\r\n\t\r\n\t function getNextPath(s) {\r\n\t var next = 'next';\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t next = flowSymb.substring(startIndex, endIndex);\r\n\t if (next.indexOf(',') < 0) {\r\n\t if (next !== 'yes' && next !== 'no') {\r\n\t next = 'next, ' + next;\r\n\t }\r\n\t }\r\n\t }\r\n\t return next;\r\n\t }\r\n\t\r\n\t while (lines.length > 0) {\r\n\t var line = lines.splice(0, 1)[0].trim();\r\n\t\r\n\t if (line.indexOf('=>') >= 0) {\r\n\t // definition\r\n\t var parts = line.split('=>');\r\n\t var symbol = {\r\n\t key: parts[0].replace(/\\(.*\\)/, ''),\r\n\t symbolType: parts[1],\r\n\t text: null,\r\n\t link: null,\r\n\t target: null,\r\n\t flowstate: null,\r\n\t lineStyle: {},\r\n\t params: {}\r\n\t };\r\n\t\r\n\t //parse parameters\r\n\t var params = parts[0].match(/\\((.*)\\)/);\r\n\t if (params && params.length > 1){\r\n\t var entries = params[1].split(',');\r\n\t for(var i = 0; i < entries.length; i++) {\r\n\t var entry = entries[0].split('=');\r\n\t if (entry.length == 2){\r\n\t symbol.params[entry[0]] = entry[1];\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t var sub;\r\n\t\r\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\r\n\t sub = symbol.symbolType.split(': ');\r\n\t symbol.symbolType = sub.shift();\r\n\t symbol.text = sub.join(': ');\r\n\t }\r\n\t\r\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\r\n\t sub = symbol.text.split(':>');\r\n\t symbol.text = sub.shift();\r\n\t symbol.link = sub.join(':>');\r\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\r\n\t sub = symbol.symbolType.split(':>');\r\n\t symbol.symbolType = sub.shift();\r\n\t symbol.link = sub.join(':>');\r\n\t }\r\n\t\r\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\r\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\r\n\t }\r\n\t\r\n\t /* adding support for links */\r\n\t if (symbol.link) {\r\n\t var startIndex = symbol.link.indexOf('[') + 1;\r\n\t var endIndex = symbol.link.indexOf(']');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\r\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\r\n\t }\r\n\t }\r\n\t /* end of link support */\r\n\t\r\n\t /* adding support for flowstates */\r\n\t if (symbol.text) {\r\n\t if (symbol.text.indexOf('|') >= 0) {\r\n\t var txtAndState = symbol.text.split('|');\r\n\t symbol.flowstate = txtAndState.pop().trim();\r\n\t symbol.text = txtAndState.join('|');\r\n\t }\r\n\t }\r\n\t /* end of flowstate support */\r\n\t\r\n\t chart.symbols[symbol.key] = symbol;\r\n\t\r\n\t } else if (line.indexOf('->') >= 0) {\r\n\t // flow\r\n\t var flowSymbols = line.split('->');\r\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\r\n\t var flowSymb = flowSymbols[i];\r\n\t var symbVal = getSymbValue(flowSymb);\r\n\t\r\n\t if (symbVal === 'true' || symbVal === 'false') {\r\n\t // map true or false to yes or no respectively\r\n\t flowSymb = flowSymb.replace('true', 'yes');\r\n\t flowSymb = flowSymb.replace('false', 'no');\r\n\t }\r\n\t\r\n\t var realSymb = getSymbol(flowSymb);\r\n\t var next = getNextPath(flowSymb);\r\n\t\r\n\t var direction = null;\r\n\t if (next.indexOf(',') >= 0) {\r\n\t var condOpt = next.split(',');\r\n\t next = condOpt[0];\r\n\t direction = condOpt[1].trim();\r\n\t }\r\n\t\r\n\t if (!chart.start) {\r\n\t chart.start = realSymb;\r\n\t }\r\n\t\r\n\t if (i + 1 < lenS) {\r\n\t var nextSymb = flowSymbols[i + 1];\r\n\t realSymb[next] = getSymbol(nextSymb);\r\n\t realSymb['direction_' + next] = direction;\r\n\t direction = null;\r\n\t }\r\n\t }\r\n\t } else if (line.indexOf('@>') >= 0) {\r\n\t\r\n\t // line style\r\n\t var lineStyleSymbols = line.split('@>');\r\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\r\n\t\r\n\t if ((i+1) != lenS){\r\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\r\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\r\n\t\r\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i+1]));\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t }\r\n\t return chart;\r\n\t}\r\n\t\r\n\tmodule.exports = parse;\r\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\r\n\tvar drawPath = drawAPI.drawPath;\r\n\t\r\n\tfunction Condition(chart, options) {\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options);\r\n\t this.textMargin = this.getAttr('text-margin');\r\n\t this.yes_direction = 'bottom';\r\n\t this.no_direction = 'right';\r\n\t this.params = options.params;\r\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\r\n\t if (options.direction_yes === 'right') {\r\n\t this.no_direction = 'bottom';\r\n\t this.yes_direction = 'right';\r\n\t } else {\r\n\t this.no_direction = 'right';\r\n\t this.yes_direction = 'bottom';\r\n\t }\r\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\r\n\t if (options.direction_no === 'right') {\r\n\t this.yes_direction = 'bottom';\r\n\t this.no_direction = 'right';\r\n\t } else {\r\n\t this.yes_direction = 'right';\r\n\t this.no_direction = 'bottom';\r\n\t }\r\n\t } else {\r\n\t this.yes_direction = 'bottom';\r\n\t this.no_direction = 'right';\r\n\t }\r\n\t\r\n\t this.yes_direction = this.yes_direction || 'bottom';\r\n\t this.no_direction = this.no_direction || 'right';\r\n\t\r\n\t this.text.attr({\r\n\t x: this.textMargin * 2\r\n\t });\r\n\t\r\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\r\n\t width += width/2;\r\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\r\n\t height += height/2;\r\n\t height = Math.max(width * 0.5, height);\r\n\t var startX = width/4;\r\n\t var startY = height/4;\r\n\t\r\n\t this.text.attr({\r\n\t x: startX + this.textMargin/2\r\n\t });\r\n\t\r\n\t var start = {x: startX, y: startY};\r\n\t var points = [\r\n\t {x: startX - width/4, y: startY + height/4},\r\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\r\n\t {x: startX - width/4 + width, y: startY + height/4},\r\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\r\n\t {x: startX - width/4, y: startY + height/4}\r\n\t ];\r\n\t\r\n\t var symbol = drawPath(chart, start, points);\r\n\t\r\n\t symbol.attr({\r\n\t stroke: this.getAttr('element-color'),\r\n\t 'stroke-width': this.getAttr('line-width'),\r\n\t fill: this.getAttr('fill')\r\n\t });\r\n\t if (options.link) { symbol.attr('href', options.link); }\r\n\t if (options.target) { symbol.attr('target', options.target); }\r\n\t if (options.key) { symbol.node.id = options.key; }\r\n\t symbol.node.setAttribute('class', this.getAttr('class'));\r\n\t\r\n\t this.text.attr({\r\n\t y: symbol.getBBox().height/2\r\n\t });\r\n\t\r\n\t this.group.push(symbol);\r\n\t symbol.insertBefore(this.text);\r\n\t\r\n\t this.initialize();\r\n\t}\r\n\tinherits(Condition, Symbol);\r\n\t\r\n\tCondition.prototype.render = function() {\r\n\t\r\n\t if (this.yes_direction) {\r\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\r\n\t }\r\n\t\r\n\t if (this.no_direction) {\r\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\r\n\t }\r\n\t\r\n\t var lineLength = this.getAttr('line-length');\r\n\t\r\n\t if (this.bottom_symbol) {\r\n\t var bottomPoint = this.getBottom();\r\n\t\r\n\t if (!this.bottom_symbol.isPositioned) {\r\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\r\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\r\n\t this.bottom_symbol.isPositioned = true;\r\n\t\r\n\t this.bottom_symbol.render();\r\n\t }\r\n\t }\r\n\t\r\n\t if (this.right_symbol) {\r\n\t var rightPoint = this.getRight();\r\n\t\r\n\t if (!this.right_symbol.isPositioned) {\r\n\t\r\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\r\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\t\r\n\t var self = this;\r\n\t (function shift() {\r\n\t var hasSymbolUnder = false;\r\n\t var symb;\r\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n\t symb = self.chart.symbols[i];\r\n\t\r\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \r\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\r\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\r\n\t hasSymbolUnder = true;\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t if (hasSymbolUnder) {\r\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\r\n\t shift();\r\n\t }\r\n\t })();\r\n\t\r\n\t this.right_symbol.isPositioned = true;\r\n\t\r\n\t this.right_symbol.render();\r\n\t }\r\n\t }\r\n\t};\r\n\t\r\n\tCondition.prototype.renderLines = function() {\r\n\t if (this.yes_symbol) {\r\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\r\n\t }\r\n\t\r\n\t if (this.no_symbol) {\r\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\r\n\t }\r\n\t};\r\n\t\r\n\tmodule.exports = Condition;\r\n\n\n/***/ }),\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\r\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\r\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\r\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\r\n\t\r\n\tfunction FlowChart(container, options) {\r\n\t options = options || {};\r\n\t\r\n\t this.paper = new Raphael(container);\r\n\t\r\n\t this.options = defaults(options, defaultOptions);\r\n\t\r\n\t this.symbols = [];\r\n\t this.lines = [];\r\n\t this.start = null;\r\n\t}\r\n\t\r\n\tFlowChart.prototype.handle = function(symbol) {\r\n\t if (this.symbols.indexOf(symbol) <= -1) {\r\n\t this.symbols.push(symbol);\r\n\t }\r\n\t\r\n\t var flowChart = this;\r\n\t\r\n\t if (symbol instanceof(Condition)) {\r\n\t symbol.yes = function(nextSymbol) {\r\n\t symbol.yes_symbol = nextSymbol;\r\n\t if(symbol.no_symbol) {\r\n\t symbol.pathOk = true;\r\n\t }\r\n\t return flowChart.handle(nextSymbol);\r\n\t };\r\n\t symbol.no = function(nextSymbol) {\r\n\t symbol.no_symbol = nextSymbol;\r\n\t if(symbol.yes_symbol) {\r\n\t symbol.pathOk = true;\r\n\t }\r\n\t return flowChart.handle(nextSymbol);\r\n\t };\r\n\t } else {\r\n\t symbol.then = function(nextSymbol) {\r\n\t symbol.next = nextSymbol;\r\n\t symbol.pathOk = true;\r\n\t return flowChart.handle(nextSymbol);\r\n\t };\r\n\t }\r\n\t\r\n\t return symbol;\r\n\t};\r\n\t\r\n\tFlowChart.prototype.startWith = function(symbol) {\r\n\t this.start = symbol;\r\n\t return this.handle(symbol);\r\n\t};\r\n\t\r\n\tFlowChart.prototype.render = function() {\r\n\t var maxWidth = 0,\r\n\t maxHeight = 0,\r\n\t i = 0,\r\n\t len = 0,\r\n\t maxX = 0,\r\n\t maxY = 0,\r\n\t minX = 0,\r\n\t minY = 0,\r\n\t symbol,\r\n\t line;\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t if (symbol.width > maxWidth) {\r\n\t maxWidth = symbol.width;\r\n\t }\r\n\t if (symbol.height > maxHeight) {\r\n\t maxHeight = symbol.height;\r\n\t }\r\n\t }\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\r\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\r\n\t }\r\n\t\r\n\t this.start.render();\r\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t // symbol = this.symbols[i];\r\n\t // symbol.render();\r\n\t // }\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t symbol.renderLines();\r\n\t }\r\n\t\r\n\t maxX = this.maxXFromLine;\r\n\t\r\n\t var x;\r\n\t var y;\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t x = symbol.getX() + symbol.width;\r\n\t y = symbol.getY() + symbol.height;\r\n\t if (x > maxX) {\r\n\t maxX = x;\r\n\t }\r\n\t if (y > maxY) {\r\n\t maxY = y;\r\n\t }\r\n\t }\r\n\t\r\n\t for (i = 0, len = this.lines.length; i < len; i++) {\r\n\t line = this.lines[i].getBBox();\r\n\t x = line.x;\r\n\t y = line.y;\r\n\t var x2 = line.x2;\r\n\t var y2 = line.y2;\r\n\t if (x < minX) {\r\n\t minX = x;\r\n\t }\r\n\t if (y < minY) {\r\n\t minY = y;\r\n\t }\r\n\t if (x2 > maxX) {\r\n\t maxX = x2;\r\n\t }\r\n\t if (y2 > maxY) {\r\n\t maxY = y2;\r\n\t }\r\n\t }\r\n\t\r\n\t var scale = this.options['scale'];\r\n\t var lineWidth = this.options['line-width'];\r\n\t\r\n\t if (minX < 0) minX -= lineWidth;\r\n\t if (minY < 0) minY -= lineWidth;\r\n\t\r\n\t var width = maxX + lineWidth - minX;\r\n\t var height = maxY + lineWidth - minY;\r\n\t\r\n\t this.paper.setSize(width * scale, height * scale);\r\n\t this.paper.setViewBox(minX, minY, width, height, true);\r\n\t};\r\n\t\r\n\tFlowChart.prototype.clean = function() {\r\n\t if (this.paper) {\r\n\t var paperDom = this.paper.canvas;\r\n\t paperDom.parentNode.removeChild(paperDom);\r\n\t }\r\n\t};\r\n\t\r\n\tmodule.exports = FlowChart;\r\n\n\n/***/ }),\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\r\n\tmodule.exports = {\r\n\t 'x': 0,\r\n\t 'y': 0,\r\n\t 'line-width': 3,\r\n\t 'line-length': 50,\r\n\t 'text-margin': 10,\r\n\t 'font-size': 14,\r\n\t 'font-color': 'black',\r\n\t // 'font': 'normal',\r\n\t // 'font-family': 'calibri',\r\n\t // 'font-weight': 'normal',\r\n\t 'line-color': 'black',\r\n\t 'element-color': 'black',\r\n\t 'fill': 'white',\r\n\t 'yes-text': 'yes',\r\n\t 'no-text': 'no',\r\n\t 'arrow-end': 'block',\r\n\t 'class': 'flowchart',\r\n\t 'scale': 1,\r\n\t 'symbols': {\r\n\t 'start': {},\r\n\t 'end': {},\r\n\t 'condition': {},\r\n\t 'inputoutput': {},\r\n\t 'operation': {},\r\n\t 'subroutine': {}\r\n\t }//,\r\n\t // 'flowstate' : {\r\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\r\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\r\n\t // 'future' : { 'fill': '#FFFF99'},\r\n\t // 'invalid': {'fill': '#444444'}\r\n\t // }\r\n\t};\r\n\n\n/***/ }),\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\r\n\tif (!Array.prototype.indexOf) {\r\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\r\n\t \"use strict\";\r\n\t if (this === null) {\r\n\t throw new TypeError();\r\n\t }\r\n\t var t = Object(this);\r\n\t var len = t.length >>> 0;\r\n\t if (len === 0) {\r\n\t return -1;\r\n\t }\r\n\t var n = 0;\r\n\t if (arguments.length > 0) {\r\n\t n = Number(arguments[1]);\r\n\t if (n != n) { // shortcut for verifying if it's NaN\r\n\t n = 0;\r\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\r\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n\t }\r\n\t }\r\n\t if (n >= len) {\r\n\t return -1;\r\n\t }\r\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\r\n\t for (; k < len; k++) {\r\n\t if (k in t && t[k] === searchElement) {\r\n\t return k;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\t\r\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\r\n\tif (!Array.prototype.lastIndexOf) {\r\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\r\n\t \"use strict\";\r\n\t if (this === null) {\r\n\t throw new TypeError();\r\n\t }\r\n\t var t = Object(this);\r\n\t var len = t.length >>> 0;\r\n\t if (len === 0) {\r\n\t return -1;\r\n\t }\r\n\t var n = len;\r\n\t if (arguments.length > 1) {\r\n\t n = Number(arguments[1]);\r\n\t if (n != n) {\r\n\t n = 0;\r\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\r\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n\t }\r\n\t }\r\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\r\n\t for (; k >= 0; k--) {\r\n\t if (k in t && t[k] === searchElement) {\r\n\t return k;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\t\r\n\tif (!String.prototype.trim) {\r\n\t String.prototype.trim = function() {\r\n\t return this.replace(/^\\s+|\\s+$/g, '');\r\n\t };\r\n\t}\n\n/***/ }),\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction End(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n\t options = options || {};\r\n\t options.text = options.text || 'End';\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t}\r\n\tinherits(End, Symbol);\r\n\t\r\n\tmodule.exports = End;\r\n\n\n/***/ }),\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\r\n\tvar drawPath = drawAPI.drawPath;\r\n\t\r\n\tfunction InputOutput(chart, options) {\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options);\r\n\t this.textMargin = this.getAttr('text-margin');\r\n\t\r\n\t this.text.attr({\r\n\t x: this.textMargin * 3\r\n\t });\r\n\t\r\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\r\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\r\n\t var startX = this.textMargin;\r\n\t var startY = height/2;\r\n\t\r\n\t var start = {x: startX, y: startY};\r\n\t var points = [\r\n\t {x: startX - this.textMargin, y: height},\r\n\t {x: startX - this.textMargin + width, y: height},\r\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\r\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\r\n\t {x: startX, y: startY}\r\n\t ];\r\n\t\r\n\t var symbol = drawPath(chart, start, points);\r\n\t\r\n\t symbol.attr({\r\n\t stroke: this.getAttr('element-color'),\r\n\t 'stroke-width': this.getAttr('line-width'),\r\n\t fill: this.getAttr('fill')\r\n\t });\r\n\t if (options.link) { symbol.attr('href', options.link); }\r\n\t if (options.target) { symbol.attr('target', options.target); }\r\n\t if (options.key) { symbol.node.id = options.key; }\r\n\t symbol.node.setAttribute('class', this.getAttr('class'));\r\n\t\r\n\t this.text.attr({\r\n\t y: symbol.getBBox().height/2\r\n\t });\r\n\t\r\n\t this.group.push(symbol);\r\n\t symbol.insertBefore(this.text);\r\n\t\r\n\t this.initialize();\r\n\t}\r\n\tinherits(InputOutput, Symbol);\r\n\t\r\n\tInputOutput.prototype.getLeft = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX() + this.textMargin;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tInputOutput.prototype.getRight = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tmodule.exports = InputOutput;\r\n\n\n/***/ }),\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction Operation(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t}\r\n\tinherits(Operation, Symbol);\r\n\t\r\n\tmodule.exports = Operation;\r\n\n\n/***/ }),\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction Start(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n\t options = options || {};\r\n\t options.text = options.text || 'Start';\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t}\r\n\tinherits(Start, Symbol);\r\n\t\r\n\tmodule.exports = Start;\r\n\t\r\n\t// Start.prototype.render = function() {\r\n\t// if (this.next) {\r\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\r\n\t\r\n\t// var bottomPoint = this.getBottom();\r\n\t// var topPoint = this.next.getTop();\r\n\t\r\n\t// if (!this.next.isPositioned) {\r\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\r\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\r\n\t// this.next.isPositioned = true;\r\n\t\r\n\t// this.next.render();\r\n\t// }\r\n\t// }\r\n\t// };\r\n\t\r\n\t// Start.prototype.renderLines = function() {\r\n\t// if (this.next) {\r\n\t// this.drawLineTo(this.next);\r\n\t// }\r\n\t// };\r\n\n\n/***/ }),\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction Subroutine(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t\r\n\t symbol.attr({\r\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\r\n\t });\r\n\t\r\n\t this.text.attr({\r\n\t 'x': 2 * this.getAttr('text-margin')\r\n\t });\r\n\t\r\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\r\n\t innerWrap.attr({\r\n\t x: this.getAttr('text-margin'),\r\n\t stroke: this.getAttr('element-color'),\r\n\t 'stroke-width': this.getAttr('line-width'),\r\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\r\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\r\n\t fill: this.getAttr('fill')\r\n\t });\r\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\r\n\t\r\n\t var font = this.getAttr('font');\r\n\t var fontF = this.getAttr('font-family');\r\n\t var fontW = this.getAttr('font-weight');\r\n\t\r\n\t if (font) innerWrap.attr({ 'font': font });\r\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\r\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\r\n\t\r\n\t if (options.link) { innerWrap.attr('href', options.link); }\r\n\t if (options.target) { innerWrap.attr('target', options.target); }\r\n\t this.group.push(innerWrap);\r\n\t innerWrap.insertBefore(this.text);\r\n\t\r\n\t this.initialize();\r\n\t}\r\n\tinherits(Subroutine, Symbol);\r\n\t\r\n\tmodule.exports = Subroutine;\r\n\n\n/***/ }),\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\r\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\r\n\t\t(function( $ ) {\r\n\t\t\t$.fn.flowChart = function( options ) {\r\n\t\t\t\treturn this.each(function() {\r\n\t\t\t\t\tvar $this = $(this);\r\n\t\t\t\t\tvar chart = parse($this.text());\r\n\t\t\t\t\t$this.html('');\r\n\t\t\t\t\tchart.drawSVG(this, options);\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t})(jQuery); // eslint-disable-line\r\n\t}\r\n\n\n/***/ }),\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"," \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 b25fc93d093648e4134a","require('./src/flowchart.shim');\r\nvar parse = require('./src/flowchart.parse');\r\nrequire('./src/jquery-plugin');\r\n\r\nvar FlowChart = {\r\n\tparse: parse\r\n};\r\n\r\nif (typeof window !== 'undefined') {\r\n\twindow.flowchart = FlowChart;\r\n}\r\n\r\nmodule.exports = FlowChart;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\r\n if (!options || typeof options === 'function') {\r\n return defaultOptions;\r\n }\r\n\r\n var merged = {};\r\n for (var attrname in defaultOptions) {\r\n merged[attrname] = defaultOptions[attrname];\r\n }\r\n\r\n for (attrname in options) {\r\n if (options[attrname]) {\r\n if (typeof merged[attrname] === 'object') {\r\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\r\n } else {\r\n merged[attrname] = options[attrname];\r\n }\r\n }\r\n }\r\n return merged;\r\n}\r\n\r\nfunction _inherits(ctor, superCtor) {\r\n if (typeof(Object.create) === 'function') {\r\n // implementation from standard node.js 'util' module\r\n ctor.super_ = superCtor;\r\n ctor.prototype = Object.create(superCtor.prototype, {\r\n constructor: {\r\n value: ctor,\r\n enumerable: false,\r\n writable: true,\r\n configurable: true\r\n }\r\n });\r\n } else {\r\n // old school shim for old browsers\r\n ctor.super_ = superCtor;\r\n var TempCtor = function () {};\r\n TempCtor.prototype = superCtor.prototype;\r\n ctor.prototype = new TempCtor();\r\n ctor.prototype.constructor = ctor;\r\n }\r\n}\r\n\r\n// move dependent functions to a container so that\r\n// they can be overriden easier in no jquery environment (node.js)\r\nmodule.exports = {\r\n defaults: _defaults,\r\n inherits: _inherits\r\n};\r\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');\r\nvar drawLine = drawAPI.drawLine;\r\nvar checkLineIntersection = drawAPI.checkLineIntersection;\r\n\r\nfunction Symbol(chart, options, symbol) {\r\n this.chart = chart;\r\n this.group = this.chart.paper.set();\r\n this.symbol = symbol;\r\n this.connectedTo = [];\r\n this.symbolType = options.symbolType;\r\n this.flowstate = (options.flowstate || 'future');\r\n this.lineStyle = (options.lineStyle || {});\r\n this.key = (options.key || '');\r\n\r\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\r\n\r\n this.text = this.chart.paper.text(0, 0, options.text);\r\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\r\n if (options.key) { this.text.node.id = options.key + 't'; }\r\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\r\n\r\n this.text.attr({\r\n 'text-anchor': 'start',\r\n 'x' : this.getAttr('text-margin'),\r\n 'fill' : this.getAttr('font-color'),\r\n 'font-size' : this.getAttr('font-size')\r\n });\r\n\r\n var font = this.getAttr('font');\r\n var fontF = this.getAttr('font-family');\r\n var fontW = this.getAttr('font-weight');\r\n\r\n if (font) this.text.attr({ 'font': font });\r\n if (fontF) this.text.attr({ 'font-family': fontF });\r\n if (fontW) this.text.attr({ 'font-weight': fontW });\r\n\r\n if (options.link) { this.text.attr('href', options.link); }\r\n if (options.target) { this.text.attr('target', options.target); }\r\n\r\n var maxWidth = this.getAttr('maxWidth');\r\n if (maxWidth) {\r\n // using this approach: http://stackoverflow.com/a/3153457/22466\r\n var words = options.text.split(' ');\r\n var tempText = \"\";\r\n for (var i=0, ii=words.length; i maxWidth) {\r\n tempText += \"\\n\" + word;\r\n } else {\r\n tempText += \" \" + word;\r\n }\r\n }\r\n this.text.attr(\"text\", tempText.substring(1));\r\n }\r\n\r\n this.group.push(this.text);\r\n\r\n if (symbol) {\r\n var tmpMargin = this.getAttr('text-margin');\r\n\r\n symbol.attr({\r\n 'fill' : this.getAttr('fill'),\r\n 'stroke' : this.getAttr('element-color'),\r\n 'stroke-width' : this.getAttr('line-width'),\r\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\r\n 'height' : this.text.getBBox().height + 2 * tmpMargin\r\n });\r\n\r\n symbol.node.setAttribute('class', this.getAttr('class'));\r\n\r\n if (options.link) { symbol.attr('href', options.link); }\r\n if (options.target) { symbol.attr('target', options.target); }\r\n if (options.key) { symbol.node.id = options.key; }\r\n\r\n this.group.push(symbol);\r\n symbol.insertBefore(this.text);\r\n\r\n this.text.attr({\r\n 'y': symbol.getBBox().height/2\r\n });\r\n\r\n this.initialize();\r\n }\r\n\r\n}\r\n\r\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\r\nSymbol.prototype.getAttr = function(attName) {\r\n if (!this.chart) {\r\n return undefined;\r\n }\r\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\r\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\r\n var opt1;\r\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\r\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\r\n }\r\n return (opt1 || opt2 || opt3);\r\n};\r\n\r\nSymbol.prototype.initialize = function() {\r\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\r\n\r\n this.width = this.group.getBBox().width;\r\n this.height = this.group.getBBox().height;\r\n};\r\n\r\nSymbol.prototype.getCenter = function() {\r\n return {x: this.getX() + this.width/2,\r\n y: this.getY() + this.height/2};\r\n};\r\n\r\nSymbol.prototype.getX = function() {\r\n return this.group.getBBox().x;\r\n};\r\n\r\nSymbol.prototype.getY = function() {\r\n return this.group.getBBox().y;\r\n};\r\n\r\nSymbol.prototype.shiftX = function(x) {\r\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\r\n};\r\n\r\nSymbol.prototype.setX = function(x) {\r\n this.group.transform('t' + x + ',' + this.getY());\r\n};\r\n\r\nSymbol.prototype.shiftY = function(y) {\r\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\r\n};\r\n\r\nSymbol.prototype.setY = function(y) {\r\n this.group.transform('t' + this.getX() + ',' + y);\r\n};\r\n\r\nSymbol.prototype.getTop = function() {\r\n var y = this.getY();\r\n var x = this.getX() + this.width/2;\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.getBottom = function() {\r\n var y = this.getY() + this.height;\r\n var x = this.getX() + this.width/2;\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.getLeft = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX();\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.getRight = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX() + this.group.getBBox().width;\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.render = function() {\r\n if (this.next) {\r\n\r\n var lineLength = this.getAttr('line-length');\r\n\r\n if (this.next_direction === 'right') {\r\n\r\n var rightPoint = this.getRight();\r\n\r\n if (!this.next.isPositioned) {\r\n\r\n this.next.setY(rightPoint.y - this.next.height/2);\r\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\r\n var self = this;\r\n (function shift() {\r\n var hasSymbolUnder = false;\r\n var symb;\r\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n symb = self.chart.symbols[i];\r\n\r\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\r\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\r\n hasSymbolUnder = true;\r\n break;\r\n }\r\n }\r\n\r\n if (hasSymbolUnder) {\r\n self.next.setX(symb.getX() + symb.width + lineLength);\r\n shift();\r\n }\r\n })();\r\n\r\n this.next.isPositioned = true;\r\n\r\n this.next.render();\r\n }\r\n } else {\r\n var bottomPoint = this.getBottom();\r\n\r\n if (!this.next.isPositioned) {\r\n this.next.shiftY(this.getY() + this.height + lineLength);\r\n this.next.setX(bottomPoint.x - this.next.width/2);\r\n this.next.isPositioned = true;\r\n\r\n this.next.render();\r\n }\r\n }\r\n }\r\n};\r\n\r\nSymbol.prototype.renderLines = function() {\r\n if (this.next) {\r\n if (this.next_direction) {\r\n this.drawLineTo(this.next, '', this.next_direction);\r\n } else {\r\n this.drawLineTo(this.next);\r\n }\r\n }\r\n};\r\n\r\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\r\n if (this.connectedTo.indexOf(symbol) < 0) {\r\n this.connectedTo.push(symbol);\r\n }\r\n\r\n var x = this.getCenter().x,\r\n y = this.getCenter().y,\r\n right = this.getRight(),\r\n bottom = this.getBottom(),\r\n left = this.getLeft();\r\n\r\n var symbolX = symbol.getCenter().x,\r\n symbolY = symbol.getCenter().y,\r\n symbolTop = symbol.getTop(),\r\n symbolRight = symbol.getRight(),\r\n symbolLeft = symbol.getLeft();\r\n\r\n var isOnSameColumn = x === symbolX,\r\n isOnSameLine = y === symbolY,\r\n isUnder = y < symbolY,\r\n isUpper = y > symbolY || this === symbol,\r\n isLeft = x > symbolX,\r\n isRight = x < symbolX;\r\n\r\n var maxX = 0,\r\n line,\r\n lineLength = this.getAttr('line-length'),\r\n lineWith = this.getAttr('line-width');\r\n\r\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\r\n line = drawLine(this.chart, bottom, symbolTop, text);\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x;\r\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\r\n line = drawLine(this.chart, right, symbolLeft, text);\r\n this.rightStart = true;\r\n symbol.leftEnd = true;\r\n maxX = symbolLeft.x;\r\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\r\n line = drawLine(this.chart, left, symbolRight, text);\r\n this.leftStart = true;\r\n symbol.rightEnd = true;\r\n maxX = symbolRight.x;\r\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\r\n line = drawLine(this.chart, right, [\r\n {x: right.x + lineLength/2, y: right.y},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\r\n line = drawLine(this.chart, right, [\r\n {x: right.x + lineLength/2, y: right.y},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((!origin || origin === 'bottom') && isLeft) {\r\n if (this.leftEnd && isUpper) {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n } else {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n }\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n } else if ((!origin || origin === 'bottom') && isRight) {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n } else if ((origin && origin === 'right') && isLeft) {\r\n line = drawLine(this.chart, right, [\r\n {x: right.x + lineLength/2, y: right.y},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((origin && origin === 'right') && isRight) {\r\n line = drawLine(this.chart, right, [\r\n {x: symbolTop.x, y: right.y},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: bottom.y + lineLength/2},\r\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x + lineLength/2;\r\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\r\n var diffX = left.x - lineLength/2;\r\n if (symbolLeft.x < left.x) {\r\n diffX = symbolLeft.x - lineLength/2;\r\n }\r\n line = drawLine(this.chart, left, [\r\n {x: diffX, y: left.y},\r\n {x: diffX, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.leftStart = true;\r\n symbol.topEnd = true;\r\n maxX = left.x;\r\n } else if ((origin === 'left')) {\r\n line = drawLine(this.chart, left, [\r\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\r\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.leftStart = true;\r\n symbol.topEnd = true;\r\n maxX = left.x;\r\n }\r\n\r\n //update line style\r\n if (this.lineStyle[symbol.key] && line){\r\n line.attr( this.lineStyle[symbol.key]);\r\n }\r\n\r\n if (line) {\r\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\r\n var otherLine = this.chart.lines[l];\r\n var len;\r\n\r\n var ePath = otherLine.attr('path'),\r\n lPath = line.attr('path');\r\n\r\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\r\n var newPath = [];\r\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\r\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\r\n\r\n var line1_from_x = newPath[0][1];\r\n var line1_from_y = newPath[0][2];\r\n var line1_to_x = newPath[1][1];\r\n var line1_to_y = newPath[1][2];\r\n\r\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\r\n var newLinePath = [];\r\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\r\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\r\n\r\n var line2_from_x = newLinePath[0][1];\r\n var line2_from_y = newLinePath[0][2];\r\n var line2_to_x = newLinePath[1][1];\r\n var line2_to_y = newLinePath[1][2];\r\n\r\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);\r\n if (res.onLine1 && res.onLine2) {\r\n\r\n var newSegment;\r\n if (line2_from_y === line2_to_y) {\r\n if (line2_from_x > line2_to_x) {\r\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n } else {\r\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n }\r\n } else {\r\n if (line2_from_y > line2_to_y) {\r\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n } else {\r\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n }\r\n }\r\n\r\n lP += 2;\r\n len += 2;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.chart.lines.push(line);\r\n }\r\n\r\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\r\n this.chart.maxXFromLine = maxX;\r\n }\r\n};\r\n\r\nmodule.exports = Symbol;\r\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) {\r\n var i, len;\r\n var path = 'M{0},{1}';\r\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\r\n path += ' L{' + i + '},{' + (i + 1) + '}';\r\n }\r\n var pathValues = [location.x, location.y];\r\n for (i = 0, len = points.length; i < len; i++) {\r\n pathValues.push(points[i].x);\r\n pathValues.push(points[i].y);\r\n }\r\n var symbol = chart.paper.path(path, pathValues);\r\n symbol.attr('stroke', chart.options['element-color']);\r\n symbol.attr('stroke-width', chart.options['line-width']);\r\n\r\n var font = chart.options.font;\r\n var fontF = chart.options['font-family'];\r\n var fontW = chart.options['font-weight'];\r\n\r\n if (font) symbol.attr({ 'font': font });\r\n if (fontF) symbol.attr({ 'font-family': fontF });\r\n if (fontW) symbol.attr({ 'font-weight': fontW });\r\n\r\n return symbol;\r\n}\r\n\r\nfunction drawLine(chart, from, to, text) {\r\n var i, len;\r\n\r\n if (Object.prototype.toString.call(to) !== '[object Array]') {\r\n to = [to];\r\n }\r\n\r\n var path = 'M{0},{1}';\r\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\r\n path += ' L{' + i + '},{' + (i + 1) + '}';\r\n }\r\n var pathValues = [from.x, from.y];\r\n for (i = 0, len = to.length; i < len; i++) {\r\n pathValues.push(to[i].x);\r\n pathValues.push(to[i].y);\r\n }\r\n\r\n var line = chart.paper.path(path, pathValues);\r\n line.attr({\r\n stroke: chart.options['line-color'],\r\n 'stroke-width': chart.options['line-width'],\r\n 'arrow-end': chart.options['arrow-end']\r\n });\r\n\r\n var font = chart.options.font;\r\n var fontF = chart.options['font-family'];\r\n var fontW = chart.options['font-weight'];\r\n\r\n if (font) line.attr({ 'font': font });\r\n if (fontF) line.attr({ 'font-family': fontF });\r\n if (fontW) line.attr({ 'font-weight': fontW });\r\n\r\n if (text) {\r\n\r\n var centerText = false;\r\n\r\n var textPath = chart.paper.text(0, 0, text);\r\n\r\n var isHorizontal = false;\r\n var firstTo = to[0];\r\n\r\n if (from.y === firstTo.y) {\r\n isHorizontal = true;\r\n }\r\n\r\n var x = 0,\r\n y = 0;\r\n\r\n if (centerText) {\r\n if (from.x > firstTo.x) {\r\n x = from.x - (from.x - firstTo.x)/2;\r\n } else {\r\n x = firstTo.x - (firstTo.x - from.x)/2;\r\n }\r\n\r\n if (from.y > firstTo.y) {\r\n y = from.y - (from.y - firstTo.y)/2;\r\n } else {\r\n y = firstTo.y - (firstTo.y - from.y)/2;\r\n }\r\n\r\n if (isHorizontal) {\r\n x -= textPath.getBBox().width/2;\r\n y -= chart.options['text-margin'];\r\n } else {\r\n x += chart.options['text-margin'];\r\n y -= textPath.getBBox().height/2;\r\n }\r\n } else {\r\n x = from.x;\r\n y = from.y;\r\n\r\n if (isHorizontal) {\r\n x += chart.options['text-margin']/2;\r\n y -= chart.options['text-margin'];\r\n } else {\r\n x += chart.options['text-margin']/2;\r\n y += chart.options['text-margin'];\r\n }\r\n }\r\n\r\n textPath.attr({\r\n 'text-anchor': 'start',\r\n 'font-size': chart.options['font-size'],\r\n 'fill': chart.options['font-color'],\r\n x: x,\r\n y: y\r\n });\r\n\r\n if (font) textPath.attr({ 'font': font });\r\n if (fontF) textPath.attr({ 'font-family': fontF });\r\n if (fontW) textPath.attr({ 'font-weight': fontW });\r\n }\r\n\r\n return line;\r\n}\r\n\r\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\r\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\r\n var denominator, a, b, numerator1, numerator2, result = {\r\n x: null,\r\n y: null,\r\n onLine1: false,\r\n onLine2: false\r\n };\r\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\r\n if (denominator === 0) {\r\n return result;\r\n }\r\n a = line1StartY - line2StartY;\r\n b = line1StartX - line2StartX;\r\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\r\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\r\n a = numerator1 / denominator;\r\n b = numerator2 / denominator;\r\n\r\n // if we cast these lines infinitely in both directions, they intersect here:\r\n result.x = line1StartX + (a * (line1EndX - line1StartX));\r\n result.y = line1StartY + (a * (line1EndY - line1StartY));\r\n /*\r\n // it is worth noting that this should be the same as:\r\n x = line2StartX + (b * (line2EndX - line2StartX));\r\n y = line2StartX + (b * (line2EndY - line2StartY));\r\n */\r\n // if line1 is a segment and line2 is infinite, they intersect if:\r\n if (a > 0 && a < 1) {\r\n result.onLine1 = true;\r\n }\r\n // if line2 is a segment and line1 is infinite, they intersect if:\r\n if (b > 0 && b < 1) {\r\n result.onLine2 = true;\r\n }\r\n // if line1 and line2 are segments, they intersect if both of the above are true\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n\tdrawPath: drawPath,\r\n\tdrawLine: drawLine,\r\n\tcheckLineIntersection: checkLineIntersection\r\n};\r\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');\r\nvar Start = require('./flowchart.symbol.start');\r\nvar End = require('./flowchart.symbol.end');\r\nvar Operation = require('./flowchart.symbol.operation');\r\nvar InputOutput = require('./flowchart.symbol.inputoutput');\r\nvar Subroutine = require('./flowchart.symbol.subroutine');\r\nvar Condition = require('./flowchart.symbol.condition');\r\n\r\nfunction parse(input) {\r\n input = input || '';\r\n input = input.trim();\r\n\r\n var chart = {\r\n symbols: {},\r\n start: null,\r\n drawSVG: function(container, options) {\r\n var self = this;\r\n\r\n if (this.diagram) {\r\n this.diagram.clean();\r\n }\r\n\r\n var diagram = new FlowChart(container, options);\r\n this.diagram = diagram;\r\n var dispSymbols = {};\r\n\r\n function getDisplaySymbol(s) {\r\n if (dispSymbols[s.key]) {\r\n return dispSymbols[s.key];\r\n }\r\n\r\n switch (s.symbolType) {\r\n case 'start':\r\n dispSymbols[s.key] = new Start(diagram, s);\r\n break;\r\n case 'end':\r\n dispSymbols[s.key] = new End(diagram, s);\r\n break;\r\n case 'operation':\r\n dispSymbols[s.key] = new Operation(diagram, s);\r\n break;\r\n case 'inputoutput':\r\n dispSymbols[s.key] = new InputOutput(diagram, s); \r\n break;\r\n case 'subroutine':\r\n dispSymbols[s.key] = new Subroutine(diagram, s);\r\n break;\r\n case 'condition':\r\n dispSymbols[s.key] = new Condition(diagram, s);\r\n break;\r\n default:\r\n return new Error('Wrong symbol type!');\r\n }\r\n\r\n return dispSymbols[s.key];\r\n }\r\n\r\n (function constructChart(s, prevDisp, prev) {\r\n var dispSymb = getDisplaySymbol(s);\r\n\r\n if (self.start === s) {\r\n diagram.startWith(dispSymb);\r\n } else if (prevDisp && prev && !prevDisp.pathOk) {\r\n if (prevDisp instanceof(Condition)) {\r\n if (prev.yes === s) {\r\n prevDisp.yes(dispSymb);\r\n }\r\n if (prev.no === s) {\r\n prevDisp.no(dispSymb);\r\n }\r\n } else {\r\n prevDisp.then(dispSymb);\r\n }\r\n }\r\n\r\n if (dispSymb.pathOk) {\r\n return dispSymb;\r\n }\r\n\r\n if (dispSymb instanceof(Condition)) {\r\n if (s.yes) {\r\n constructChart(s.yes, dispSymb, s);\r\n }\r\n if (s.no) {\r\n constructChart(s.no, dispSymb, s);\r\n }\r\n } else if (s.next) {\r\n constructChart(s.next, dispSymb, s);\r\n }\r\n\r\n return dispSymb;\r\n })(this.start);\r\n\r\n diagram.render();\r\n },\r\n clean: function() {\r\n this.diagram.clean();\r\n }\r\n };\r\n\r\n var lines = [];\r\n var prevBreak = 0;\r\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\r\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\r\n var line0 = input.substring(prevBreak, i0);\r\n prevBreak = i0 + 1;\r\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\r\n }\r\n }\r\n\r\n if(prevBreak < input.length) {\r\n lines.push(input.substr(prevBreak));\r\n }\r\n\r\n for (var l = 1, len = lines.length; l < len;) {\r\n var currentLine = lines[l];\r\n\r\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\r\n lines[l - 1] += '\\n' + currentLine;\r\n lines.splice(l, 1);\r\n len--;\r\n } else {\r\n l++;\r\n }\r\n }\r\n\r\n function getStyle(s){\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n return s.substring(startIndex,endIndex);\r\n }\r\n return '{}';\r\n }\r\n\r\n function getSymbValue(s){\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n return s.substring(startIndex,endIndex);\r\n }\r\n return '';\r\n }\r\n\r\n function getSymbol(s) {\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n return chart.symbols[s.substring(0, startIndex - 1)]; \r\n }\r\n return chart.symbols[s];\r\n }\r\n\r\n function getNextPath(s) {\r\n var next = 'next';\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n next = flowSymb.substring(startIndex, endIndex);\r\n if (next.indexOf(',') < 0) {\r\n if (next !== 'yes' && next !== 'no') {\r\n next = 'next, ' + next;\r\n }\r\n }\r\n }\r\n return next;\r\n }\r\n\r\n while (lines.length > 0) {\r\n var line = lines.splice(0, 1)[0].trim();\r\n\r\n if (line.indexOf('=>') >= 0) {\r\n // definition\r\n var parts = line.split('=>');\r\n var symbol = {\r\n key: parts[0].replace(/\\(.*\\)/, ''),\r\n symbolType: parts[1],\r\n text: null,\r\n link: null,\r\n target: null,\r\n flowstate: null,\r\n lineStyle: {},\r\n params: {}\r\n };\r\n\r\n //parse parameters\r\n var params = parts[0].match(/\\((.*)\\)/);\r\n if (params && params.length > 1){\r\n var entries = params[1].split(',');\r\n for(var i = 0; i < entries.length; i++) {\r\n var entry = entries[0].split('=');\r\n if (entry.length == 2){\r\n symbol.params[entry[0]] = entry[1];\r\n }\r\n }\r\n }\r\n\r\n var sub;\r\n\r\n if (symbol.symbolType.indexOf(': ') >= 0) {\r\n sub = symbol.symbolType.split(': ');\r\n symbol.symbolType = sub.shift();\r\n symbol.text = sub.join(': ');\r\n }\r\n\r\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\r\n sub = symbol.text.split(':>');\r\n symbol.text = sub.shift();\r\n symbol.link = sub.join(':>');\r\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\r\n sub = symbol.symbolType.split(':>');\r\n symbol.symbolType = sub.shift();\r\n symbol.link = sub.join(':>');\r\n }\r\n\r\n if (symbol.symbolType.indexOf('\\n') >= 0) {\r\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\r\n }\r\n\r\n /* adding support for links */\r\n if (symbol.link) {\r\n var startIndex = symbol.link.indexOf('[') + 1;\r\n var endIndex = symbol.link.indexOf(']');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n symbol.target = symbol.link.substring(startIndex, endIndex);\r\n symbol.link = symbol.link.substring(0, startIndex - 1);\r\n }\r\n }\r\n /* end of link support */\r\n\r\n /* adding support for flowstates */\r\n if (symbol.text) {\r\n if (symbol.text.indexOf('|') >= 0) {\r\n var txtAndState = symbol.text.split('|');\r\n symbol.flowstate = txtAndState.pop().trim();\r\n symbol.text = txtAndState.join('|');\r\n }\r\n }\r\n /* end of flowstate support */\r\n\r\n chart.symbols[symbol.key] = symbol;\r\n\r\n } else if (line.indexOf('->') >= 0) {\r\n // flow\r\n var flowSymbols = line.split('->');\r\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\r\n var flowSymb = flowSymbols[i];\r\n var symbVal = getSymbValue(flowSymb);\r\n\r\n if (symbVal === 'true' || symbVal === 'false') {\r\n // map true or false to yes or no respectively\r\n flowSymb = flowSymb.replace('true', 'yes');\r\n flowSymb = flowSymb.replace('false', 'no');\r\n }\r\n\r\n var realSymb = getSymbol(flowSymb);\r\n var next = getNextPath(flowSymb);\r\n\r\n var direction = null;\r\n if (next.indexOf(',') >= 0) {\r\n var condOpt = next.split(',');\r\n next = condOpt[0];\r\n direction = condOpt[1].trim();\r\n }\r\n\r\n if (!chart.start) {\r\n chart.start = realSymb;\r\n }\r\n\r\n if (i + 1 < lenS) {\r\n var nextSymb = flowSymbols[i + 1];\r\n realSymb[next] = getSymbol(nextSymb);\r\n realSymb['direction_' + next] = direction;\r\n direction = null;\r\n }\r\n }\r\n } else if (line.indexOf('@>') >= 0) {\r\n\r\n // line style\r\n var lineStyleSymbols = line.split('@>');\r\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\r\n\r\n if ((i+1) != lenS){\r\n var curSymb = getSymbol(lineStyleSymbols[i]);\r\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\r\n\r\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i+1]));\r\n }\r\n }\r\n }\r\n\r\n }\r\n return chart;\r\n}\r\n\r\nmodule.exports = parse;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\nvar drawAPI = require('./flowchart.functions');\r\nvar drawPath = drawAPI.drawPath;\r\n\r\nfunction Condition(chart, options) {\r\n options = options || {};\r\n Symbol.call(this, chart, options);\r\n this.textMargin = this.getAttr('text-margin');\r\n this.yes_direction = 'bottom';\r\n this.no_direction = 'right';\r\n this.params = options.params;\r\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\r\n if (options.direction_yes === 'right') {\r\n this.no_direction = 'bottom';\r\n this.yes_direction = 'right';\r\n } else {\r\n this.no_direction = 'right';\r\n this.yes_direction = 'bottom';\r\n }\r\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\r\n if (options.direction_no === 'right') {\r\n this.yes_direction = 'bottom';\r\n this.no_direction = 'right';\r\n } else {\r\n this.yes_direction = 'right';\r\n this.no_direction = 'bottom';\r\n }\r\n } else {\r\n this.yes_direction = 'bottom';\r\n this.no_direction = 'right';\r\n }\r\n\r\n this.yes_direction = this.yes_direction || 'bottom';\r\n this.no_direction = this.no_direction || 'right';\r\n\r\n this.text.attr({\r\n x: this.textMargin * 2\r\n });\r\n\r\n var width = this.text.getBBox().width + 3 * this.textMargin;\r\n width += width/2;\r\n var height = this.text.getBBox().height + 2 * this.textMargin;\r\n height += height/2;\r\n height = Math.max(width * 0.5, height);\r\n var startX = width/4;\r\n var startY = height/4;\r\n\r\n this.text.attr({\r\n x: startX + this.textMargin/2\r\n });\r\n\r\n var start = {x: startX, y: startY};\r\n var points = [\r\n {x: startX - width/4, y: startY + height/4},\r\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\r\n {x: startX - width/4 + width, y: startY + height/4},\r\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\r\n {x: startX - width/4, y: startY + height/4}\r\n ];\r\n\r\n var symbol = drawPath(chart, start, points);\r\n\r\n symbol.attr({\r\n stroke: this.getAttr('element-color'),\r\n 'stroke-width': this.getAttr('line-width'),\r\n fill: this.getAttr('fill')\r\n });\r\n if (options.link) { symbol.attr('href', options.link); }\r\n if (options.target) { symbol.attr('target', options.target); }\r\n if (options.key) { symbol.node.id = options.key; }\r\n symbol.node.setAttribute('class', this.getAttr('class'));\r\n\r\n this.text.attr({\r\n y: symbol.getBBox().height/2\r\n });\r\n\r\n this.group.push(symbol);\r\n symbol.insertBefore(this.text);\r\n\r\n this.initialize();\r\n}\r\ninherits(Condition, Symbol);\r\n\r\nCondition.prototype.render = function() {\r\n\r\n if (this.yes_direction) {\r\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\r\n }\r\n\r\n if (this.no_direction) {\r\n this[this.no_direction + '_symbol'] = this.no_symbol;\r\n }\r\n\r\n var lineLength = this.getAttr('line-length');\r\n\r\n if (this.bottom_symbol) {\r\n var bottomPoint = this.getBottom();\r\n\r\n if (!this.bottom_symbol.isPositioned) {\r\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\r\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\r\n this.bottom_symbol.isPositioned = true;\r\n\r\n this.bottom_symbol.render();\r\n }\r\n }\r\n\r\n if (this.right_symbol) {\r\n var rightPoint = this.getRight();\r\n\r\n if (!this.right_symbol.isPositioned) {\r\n\r\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\r\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\r\n var self = this;\r\n (function shift() {\r\n var hasSymbolUnder = false;\r\n var symb;\r\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n symb = self.chart.symbols[i];\r\n\r\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \r\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\r\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\r\n hasSymbolUnder = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (hasSymbolUnder) {\r\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\r\n shift();\r\n }\r\n })();\r\n\r\n this.right_symbol.isPositioned = true;\r\n\r\n this.right_symbol.render();\r\n }\r\n }\r\n};\r\n\r\nCondition.prototype.renderLines = function() {\r\n if (this.yes_symbol) {\r\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\r\n }\r\n\r\n if (this.no_symbol) {\r\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\r\n }\r\n};\r\n\r\nmodule.exports = Condition;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Raphael = require('raphael');\r\nvar defaults = require('./flowchart.helpers').defaults;\r\nvar defaultOptions = require('./flowchart.defaults');\r\nvar Condition = require('./flowchart.symbol.condition');\r\n\r\nfunction FlowChart(container, options) {\r\n options = options || {};\r\n\r\n this.paper = new Raphael(container);\r\n\r\n this.options = defaults(options, defaultOptions);\r\n\r\n this.symbols = [];\r\n this.lines = [];\r\n this.start = null;\r\n}\r\n\r\nFlowChart.prototype.handle = function(symbol) {\r\n if (this.symbols.indexOf(symbol) <= -1) {\r\n this.symbols.push(symbol);\r\n }\r\n\r\n var flowChart = this;\r\n\r\n if (symbol instanceof(Condition)) {\r\n symbol.yes = function(nextSymbol) {\r\n symbol.yes_symbol = nextSymbol;\r\n if(symbol.no_symbol) {\r\n symbol.pathOk = true;\r\n }\r\n return flowChart.handle(nextSymbol);\r\n };\r\n symbol.no = function(nextSymbol) {\r\n symbol.no_symbol = nextSymbol;\r\n if(symbol.yes_symbol) {\r\n symbol.pathOk = true;\r\n }\r\n return flowChart.handle(nextSymbol);\r\n };\r\n } else {\r\n symbol.then = function(nextSymbol) {\r\n symbol.next = nextSymbol;\r\n symbol.pathOk = true;\r\n return flowChart.handle(nextSymbol);\r\n };\r\n }\r\n\r\n return symbol;\r\n};\r\n\r\nFlowChart.prototype.startWith = function(symbol) {\r\n this.start = symbol;\r\n return this.handle(symbol);\r\n};\r\n\r\nFlowChart.prototype.render = function() {\r\n var maxWidth = 0,\r\n maxHeight = 0,\r\n i = 0,\r\n len = 0,\r\n maxX = 0,\r\n maxY = 0,\r\n minX = 0,\r\n minY = 0,\r\n symbol,\r\n line;\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n if (symbol.width > maxWidth) {\r\n maxWidth = symbol.width;\r\n }\r\n if (symbol.height > maxHeight) {\r\n maxHeight = symbol.height;\r\n }\r\n }\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\r\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\r\n }\r\n\r\n this.start.render();\r\n // for (i = 0, len = this.symbols.length; i < len; i++) {\r\n // symbol = this.symbols[i];\r\n // symbol.render();\r\n // }\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n symbol.renderLines();\r\n }\r\n\r\n maxX = this.maxXFromLine;\r\n\r\n var x;\r\n var y;\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n x = symbol.getX() + symbol.width;\r\n y = symbol.getY() + symbol.height;\r\n if (x > maxX) {\r\n maxX = x;\r\n }\r\n if (y > maxY) {\r\n maxY = y;\r\n }\r\n }\r\n\r\n for (i = 0, len = this.lines.length; i < len; i++) {\r\n line = this.lines[i].getBBox();\r\n x = line.x;\r\n y = line.y;\r\n var x2 = line.x2;\r\n var y2 = line.y2;\r\n if (x < minX) {\r\n minX = x;\r\n }\r\n if (y < minY) {\r\n minY = y;\r\n }\r\n if (x2 > maxX) {\r\n maxX = x2;\r\n }\r\n if (y2 > maxY) {\r\n maxY = y2;\r\n }\r\n }\r\n\r\n var scale = this.options['scale'];\r\n var lineWidth = this.options['line-width'];\r\n\r\n if (minX < 0) minX -= lineWidth;\r\n if (minY < 0) minY -= lineWidth;\r\n\r\n var width = maxX + lineWidth - minX;\r\n var height = maxY + lineWidth - minY;\r\n\r\n this.paper.setSize(width * scale, height * scale);\r\n this.paper.setViewBox(minX, minY, width, height, true);\r\n};\r\n\r\nFlowChart.prototype.clean = function() {\r\n if (this.paper) {\r\n var paperDom = this.paper.canvas;\r\n paperDom.parentNode.removeChild(paperDom);\r\n }\r\n};\r\n\r\nmodule.exports = FlowChart;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 6\n// module chunks = 0","// defaults\r\nmodule.exports = {\r\n 'x': 0,\r\n 'y': 0,\r\n 'line-width': 3,\r\n 'line-length': 50,\r\n 'text-margin': 10,\r\n 'font-size': 14,\r\n 'font-color': 'black',\r\n // 'font': 'normal',\r\n // 'font-family': 'calibri',\r\n // 'font-weight': 'normal',\r\n 'line-color': 'black',\r\n 'element-color': 'black',\r\n 'fill': 'white',\r\n 'yes-text': 'yes',\r\n 'no-text': 'no',\r\n 'arrow-end': 'block',\r\n 'class': 'flowchart',\r\n 'scale': 1,\r\n 'symbols': {\r\n 'start': {},\r\n 'end': {},\r\n 'condition': {},\r\n 'inputoutput': {},\r\n 'operation': {},\r\n 'subroutine': {}\r\n }//,\r\n // 'flowstate' : {\r\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\r\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\r\n // 'future' : { 'fill': '#FFFF99'},\r\n // 'invalid': {'fill': '#444444'}\r\n // }\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 7\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\r\nif (!Array.prototype.indexOf) {\r\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\r\n \"use strict\";\r\n if (this === null) {\r\n throw new TypeError();\r\n }\r\n var t = Object(this);\r\n var len = t.length >>> 0;\r\n if (len === 0) {\r\n return -1;\r\n }\r\n var n = 0;\r\n if (arguments.length > 0) {\r\n n = Number(arguments[1]);\r\n if (n != n) { // shortcut for verifying if it's NaN\r\n n = 0;\r\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\r\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n }\r\n }\r\n if (n >= len) {\r\n return -1;\r\n }\r\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\r\n for (; k < len; k++) {\r\n if (k in t && t[k] === searchElement) {\r\n return k;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\n\r\n// add lastIndexOf to non ECMA-262 standard compliant browsers\r\nif (!Array.prototype.lastIndexOf) {\r\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\r\n \"use strict\";\r\n if (this === null) {\r\n throw new TypeError();\r\n }\r\n var t = Object(this);\r\n var len = t.length >>> 0;\r\n if (len === 0) {\r\n return -1;\r\n }\r\n var n = len;\r\n if (arguments.length > 1) {\r\n n = Number(arguments[1]);\r\n if (n != n) {\r\n n = 0;\r\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\r\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n }\r\n }\r\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\r\n for (; k >= 0; k--) {\r\n if (k in t && t[k] === searchElement) {\r\n return k;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\n\r\nif (!String.prototype.trim) {\r\n String.prototype.trim = function() {\r\n return this.replace(/^\\s+|\\s+$/g, '');\r\n };\r\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 8\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction End(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n options = options || {};\r\n options.text = options.text || 'End';\r\n Symbol.call(this, chart, options, symbol);\r\n}\r\ninherits(End, Symbol);\r\n\r\nmodule.exports = End;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\nvar drawAPI = require('./flowchart.functions');\r\nvar drawPath = drawAPI.drawPath;\r\n\r\nfunction InputOutput(chart, options) {\r\n options = options || {};\r\n Symbol.call(this, chart, options);\r\n this.textMargin = this.getAttr('text-margin');\r\n\r\n this.text.attr({\r\n x: this.textMargin * 3\r\n });\r\n\r\n var width = this.text.getBBox().width + 4 * this.textMargin;\r\n var height = this.text.getBBox().height + 2 * this.textMargin;\r\n var startX = this.textMargin;\r\n var startY = height/2;\r\n\r\n var start = {x: startX, y: startY};\r\n var points = [\r\n {x: startX - this.textMargin, y: height},\r\n {x: startX - this.textMargin + width, y: height},\r\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\r\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\r\n {x: startX, y: startY}\r\n ];\r\n\r\n var symbol = drawPath(chart, start, points);\r\n\r\n symbol.attr({\r\n stroke: this.getAttr('element-color'),\r\n 'stroke-width': this.getAttr('line-width'),\r\n fill: this.getAttr('fill')\r\n });\r\n if (options.link) { symbol.attr('href', options.link); }\r\n if (options.target) { symbol.attr('target', options.target); }\r\n if (options.key) { symbol.node.id = options.key; }\r\n symbol.node.setAttribute('class', this.getAttr('class'));\r\n\r\n this.text.attr({\r\n y: symbol.getBBox().height/2\r\n });\r\n\r\n this.group.push(symbol);\r\n symbol.insertBefore(this.text);\r\n\r\n this.initialize();\r\n}\r\ninherits(InputOutput, Symbol);\r\n\r\nInputOutput.prototype.getLeft = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX() + this.textMargin;\r\n return {x: x, y: y};\r\n};\r\n\r\nInputOutput.prototype.getRight = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\r\n return {x: x, y: y};\r\n};\r\n\r\nmodule.exports = InputOutput;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction Operation(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0);\r\n options = options || {};\r\n Symbol.call(this, chart, options, symbol);\r\n}\r\ninherits(Operation, Symbol);\r\n\r\nmodule.exports = Operation;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction Start(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n options = options || {};\r\n options.text = options.text || 'Start';\r\n Symbol.call(this, chart, options, symbol);\r\n}\r\ninherits(Start, Symbol);\r\n\r\nmodule.exports = Start;\r\n\r\n// Start.prototype.render = function() {\r\n// if (this.next) {\r\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\r\n\r\n// var bottomPoint = this.getBottom();\r\n// var topPoint = this.next.getTop();\r\n\r\n// if (!this.next.isPositioned) {\r\n// this.next.shiftY(this.getY() + this.height + lineLength);\r\n// this.next.setX(bottomPoint.x - this.next.width/2);\r\n// this.next.isPositioned = true;\r\n\r\n// this.next.render();\r\n// }\r\n// }\r\n// };\r\n\r\n// Start.prototype.renderLines = function() {\r\n// if (this.next) {\r\n// this.drawLineTo(this.next);\r\n// }\r\n// };\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction Subroutine(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0);\r\n options = options || {};\r\n Symbol.call(this, chart, options, symbol);\r\n\r\n symbol.attr({\r\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\r\n });\r\n\r\n this.text.attr({\r\n 'x': 2 * this.getAttr('text-margin')\r\n });\r\n\r\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\r\n innerWrap.attr({\r\n x: this.getAttr('text-margin'),\r\n stroke: this.getAttr('element-color'),\r\n 'stroke-width': this.getAttr('line-width'),\r\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\r\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\r\n fill: this.getAttr('fill')\r\n });\r\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\r\n\r\n var font = this.getAttr('font');\r\n var fontF = this.getAttr('font-family');\r\n var fontW = this.getAttr('font-weight');\r\n\r\n if (font) innerWrap.attr({ 'font': font });\r\n if (fontF) innerWrap.attr({ 'font-family': fontF });\r\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\r\n\r\n if (options.link) { innerWrap.attr('href', options.link); }\r\n if (options.target) { innerWrap.attr('target', options.target); }\r\n this.group.push(innerWrap);\r\n innerWrap.insertBefore(this.text);\r\n\r\n this.initialize();\r\n}\r\ninherits(Subroutine, Symbol);\r\n\r\nmodule.exports = Subroutine;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 13\n// module chunks = 0","if (typeof jQuery != 'undefined') {\r\n\tvar parse = require('./flowchart.parse');\r\n\t(function( $ ) {\r\n\t\t$.fn.flowChart = function( options ) {\r\n\t\t\treturn this.each(function() {\r\n\t\t\t\tvar $this = $(this);\r\n\t\t\t\tvar chart = parse($this.text());\r\n\t\t\t\t$this.html('');\r\n\t\t\t\tchart.drawSVG(this, options);\r\n\t\t\t});\r\n\t\t};\r\n\t})(jQuery); // eslint-disable-line\r\n}\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 14\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 15\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 9641fd1c459d3101ba07","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t //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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t\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/***/ }),\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 {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ }),\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"," \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 9641fd1c459d3101ba07","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n //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 }\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 }\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');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s); \n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)]; \n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\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//////////////////\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 {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 6\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 7\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 8\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 13\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 14\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 15\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index fbb8e614..68d4ec7f 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,4 +1,4 @@ -// flowchart.js, v1.7.0 +// flowchart.js, v1.8.0 // Copyright (c)2017 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js diff --git a/release/flowchart.min.js.map b/release/flowchart.min.js.map index b9ae32c5..f87fb858 100644 --- a/release/flowchart.min.js.map +++ b/release/flowchart.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 56bd4e59d210a8507bce","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\r\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\r\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\r\n\t\r\n\tvar FlowChart = {\r\n\t\tparse: parse\r\n\t};\r\n\t\r\n\tif (typeof window !== 'undefined') {\r\n\t\twindow.flowchart = FlowChart;\r\n\t}\r\n\t\r\n\tmodule.exports = FlowChart;\r\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\r\n\t if (!options || typeof options === 'function') {\r\n\t return defaultOptions;\r\n\t }\r\n\t\r\n\t var merged = {};\r\n\t for (var attrname in defaultOptions) {\r\n\t merged[attrname] = defaultOptions[attrname];\r\n\t }\r\n\t\r\n\t for (attrname in options) {\r\n\t if (options[attrname]) {\r\n\t if (typeof merged[attrname] === 'object') {\r\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\r\n\t } else {\r\n\t merged[attrname] = options[attrname];\r\n\t }\r\n\t }\r\n\t }\r\n\t return merged;\r\n\t}\r\n\t\r\n\tfunction _inherits(ctor, superCtor) {\r\n\t if (typeof(Object.create) === 'function') {\r\n\t // implementation from standard node.js 'util' module\r\n\t ctor.super_ = superCtor;\r\n\t ctor.prototype = Object.create(superCtor.prototype, {\r\n\t constructor: {\r\n\t value: ctor,\r\n\t enumerable: false,\r\n\t writable: true,\r\n\t configurable: true\r\n\t }\r\n\t });\r\n\t } else {\r\n\t // old school shim for old browsers\r\n\t ctor.super_ = superCtor;\r\n\t var TempCtor = function () {};\r\n\t TempCtor.prototype = superCtor.prototype;\r\n\t ctor.prototype = new TempCtor();\r\n\t ctor.prototype.constructor = ctor;\r\n\t }\r\n\t}\r\n\t\r\n\t// move dependent functions to a container so that\r\n\t// they can be overriden easier in no jquery environment (node.js)\r\n\tmodule.exports = {\r\n\t defaults: _defaults,\r\n\t inherits: _inherits\r\n\t};\r\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);\r\n\tvar drawLine = drawAPI.drawLine;\r\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\r\n\t\r\n\tfunction Symbol(chart, options, symbol) {\r\n\t this.chart = chart;\r\n\t this.group = this.chart.paper.set();\r\n\t this.symbol = symbol;\r\n\t this.connectedTo = [];\r\n\t this.symbolType = options.symbolType;\r\n\t this.flowstate = (options.flowstate || 'future');\r\n\t this.lineStyle = (options.lineStyle || {});\r\n\t this.key = (options.key || '');\r\n\t\r\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\r\n\t\r\n\t this.text = this.chart.paper.text(0, 0, options.text);\r\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\r\n\t if (options.key) { this.text.node.id = options.key + 't'; }\r\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\r\n\t\r\n\t this.text.attr({\r\n\t 'text-anchor': 'start',\r\n\t 'x' : this.getAttr('text-margin'),\r\n\t 'fill' : this.getAttr('font-color'),\r\n\t 'font-size' : this.getAttr('font-size')\r\n\t });\r\n\t\r\n\t var font = this.getAttr('font');\r\n\t var fontF = this.getAttr('font-family');\r\n\t var fontW = this.getAttr('font-weight');\r\n\t\r\n\t if (font) this.text.attr({ 'font': font });\r\n\t if (fontF) this.text.attr({ 'font-family': fontF });\r\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\r\n\t\r\n\t if (options.link) { this.text.attr('href', options.link); }\r\n\t if (options.target) { this.text.attr('target', options.target); }\r\n\t\r\n\t var maxWidth = this.getAttr('maxWidth');\r\n\t if (maxWidth) {\r\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\r\n\t var words = options.text.split(' ');\r\n\t var tempText = \"\";\r\n\t for (var i=0, ii=words.length; i maxWidth) {\r\n\t tempText += \"\\n\" + word;\r\n\t } else {\r\n\t tempText += \" \" + word;\r\n\t }\r\n\t }\r\n\t this.text.attr(\"text\", tempText.substring(1));\r\n\t }\r\n\t\r\n\t this.group.push(this.text);\r\n\t\r\n\t if (symbol) {\r\n\t var tmpMargin = this.getAttr('text-margin');\r\n\t\r\n\t symbol.attr({\r\n\t 'fill' : this.getAttr('fill'),\r\n\t 'stroke' : this.getAttr('element-color'),\r\n\t 'stroke-width' : this.getAttr('line-width'),\r\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\r\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\r\n\t });\r\n\t\r\n\t symbol.node.setAttribute('class', this.getAttr('class'));\r\n\t\r\n\t if (options.link) { symbol.attr('href', options.link); }\r\n\t if (options.target) { symbol.attr('target', options.target); }\r\n\t if (options.key) { symbol.node.id = options.key; }\r\n\t\r\n\t this.group.push(symbol);\r\n\t symbol.insertBefore(this.text);\r\n\t\r\n\t this.text.attr({\r\n\t 'y': symbol.getBBox().height/2\r\n\t });\r\n\t\r\n\t this.initialize();\r\n\t }\r\n\t\r\n\t}\r\n\t\r\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\r\n\tSymbol.prototype.getAttr = function(attName) {\r\n\t if (!this.chart) {\r\n\t return undefined;\r\n\t }\r\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\r\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\r\n\t var opt1;\r\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\r\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\r\n\t }\r\n\t return (opt1 || opt2 || opt3);\r\n\t};\r\n\t\r\n\tSymbol.prototype.initialize = function() {\r\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\r\n\t\r\n\t this.width = this.group.getBBox().width;\r\n\t this.height = this.group.getBBox().height;\r\n\t};\r\n\t\r\n\tSymbol.prototype.getCenter = function() {\r\n\t return {x: this.getX() + this.width/2,\r\n\t y: this.getY() + this.height/2};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getX = function() {\r\n\t return this.group.getBBox().x;\r\n\t};\r\n\t\r\n\tSymbol.prototype.getY = function() {\r\n\t return this.group.getBBox().y;\r\n\t};\r\n\t\r\n\tSymbol.prototype.shiftX = function(x) {\r\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\r\n\t};\r\n\t\r\n\tSymbol.prototype.setX = function(x) {\r\n\t this.group.transform('t' + x + ',' + this.getY());\r\n\t};\r\n\t\r\n\tSymbol.prototype.shiftY = function(y) {\r\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\r\n\t};\r\n\t\r\n\tSymbol.prototype.setY = function(y) {\r\n\t this.group.transform('t' + this.getX() + ',' + y);\r\n\t};\r\n\t\r\n\tSymbol.prototype.getTop = function() {\r\n\t var y = this.getY();\r\n\t var x = this.getX() + this.width/2;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getBottom = function() {\r\n\t var y = this.getY() + this.height;\r\n\t var x = this.getX() + this.width/2;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getLeft = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX();\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.getRight = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX() + this.group.getBBox().width;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tSymbol.prototype.render = function() {\r\n\t if (this.next) {\r\n\t\r\n\t var lineLength = this.getAttr('line-length');\r\n\t\r\n\t if (this.next_direction === 'right') {\r\n\t\r\n\t var rightPoint = this.getRight();\r\n\t\r\n\t if (!this.next.isPositioned) {\r\n\t\r\n\t this.next.setY(rightPoint.y - this.next.height/2);\r\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\t\r\n\t var self = this;\r\n\t (function shift() {\r\n\t var hasSymbolUnder = false;\r\n\t var symb;\r\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n\t symb = self.chart.symbols[i];\r\n\t\r\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\r\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\r\n\t hasSymbolUnder = true;\r\n\t break;\r\n\t }\r\n\t }\r\n\t\r\n\t if (hasSymbolUnder) {\r\n\t self.next.setX(symb.getX() + symb.width + lineLength);\r\n\t shift();\r\n\t }\r\n\t })();\r\n\t\r\n\t this.next.isPositioned = true;\r\n\t\r\n\t this.next.render();\r\n\t }\r\n\t } else {\r\n\t var bottomPoint = this.getBottom();\r\n\t\r\n\t if (!this.next.isPositioned) {\r\n\t this.next.shiftY(this.getY() + this.height + lineLength);\r\n\t this.next.setX(bottomPoint.x - this.next.width/2);\r\n\t this.next.isPositioned = true;\r\n\t\r\n\t this.next.render();\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\t\r\n\tSymbol.prototype.renderLines = function() {\r\n\t if (this.next) {\r\n\t if (this.next_direction) {\r\n\t this.drawLineTo(this.next, '', this.next_direction);\r\n\t } else {\r\n\t this.drawLineTo(this.next);\r\n\t }\r\n\t }\r\n\t};\r\n\t\r\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\r\n\t if (this.connectedTo.indexOf(symbol) < 0) {\r\n\t this.connectedTo.push(symbol);\r\n\t }\r\n\t\r\n\t var x = this.getCenter().x,\r\n\t y = this.getCenter().y,\r\n\t right = this.getRight(),\r\n\t bottom = this.getBottom(),\r\n\t left = this.getLeft();\r\n\t\r\n\t var symbolX = symbol.getCenter().x,\r\n\t symbolY = symbol.getCenter().y,\r\n\t symbolTop = symbol.getTop(),\r\n\t symbolRight = symbol.getRight(),\r\n\t symbolLeft = symbol.getLeft();\r\n\t\r\n\t var isOnSameColumn = x === symbolX,\r\n\t isOnSameLine = y === symbolY,\r\n\t isUnder = y < symbolY,\r\n\t isUpper = y > symbolY || this === symbol,\r\n\t isLeft = x > symbolX,\r\n\t isRight = x < symbolX;\r\n\t\r\n\t var maxX = 0,\r\n\t line,\r\n\t lineLength = this.getAttr('line-length'),\r\n\t lineWith = this.getAttr('line-width');\r\n\t\r\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\r\n\t line = drawLine(this.chart, bottom, symbolTop, text);\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x;\r\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\r\n\t line = drawLine(this.chart, right, symbolLeft, text);\r\n\t this.rightStart = true;\r\n\t symbol.leftEnd = true;\r\n\t maxX = symbolLeft.x;\r\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\r\n\t line = drawLine(this.chart, left, symbolRight, text);\r\n\t this.leftStart = true;\r\n\t symbol.rightEnd = true;\r\n\t maxX = symbolRight.x;\r\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: right.x + lineLength/2, y: right.y},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: right.x + lineLength/2, y: right.y},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\r\n\t if (this.leftEnd && isUpper) {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t } else {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t }\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n\t } else if ((!origin || origin === 'bottom') && isRight) {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n\t } else if ((origin && origin === 'right') && isLeft) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: right.x + lineLength/2, y: right.y},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((origin && origin === 'right') && isRight) {\r\n\t line = drawLine(this.chart, right, [\r\n\t {x: symbolTop.x, y: right.y},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.rightStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = right.x + lineLength/2;\r\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\r\n\t line = drawLine(this.chart, bottom, [\r\n\t {x: bottom.x, y: bottom.y + lineLength/2},\r\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\r\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.bottomStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = bottom.x + lineLength/2;\r\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\r\n\t var diffX = left.x - lineLength/2;\r\n\t if (symbolLeft.x < left.x) {\r\n\t diffX = symbolLeft.x - lineLength/2;\r\n\t }\r\n\t line = drawLine(this.chart, left, [\r\n\t {x: diffX, y: left.y},\r\n\t {x: diffX, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.leftStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = left.x;\r\n\t } else if ((origin === 'left')) {\r\n\t line = drawLine(this.chart, left, [\r\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\r\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n\t {x: symbolTop.x, y: symbolTop.y}\r\n\t ], text);\r\n\t this.leftStart = true;\r\n\t symbol.topEnd = true;\r\n\t maxX = left.x;\r\n\t }\r\n\t\r\n\t //update line style\r\n\t if (this.lineStyle[symbol.key] && line){\r\n\t line.attr( this.lineStyle[symbol.key]);\r\n\t }\r\n\t\r\n\t if (line) {\r\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\r\n\t var otherLine = this.chart.lines[l];\r\n\t var len;\r\n\t\r\n\t var ePath = otherLine.attr('path'),\r\n\t lPath = line.attr('path');\r\n\t\r\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\r\n\t var newPath = [];\r\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\r\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\r\n\t\r\n\t var line1_from_x = newPath[0][1];\r\n\t var line1_from_y = newPath[0][2];\r\n\t var line1_to_x = newPath[1][1];\r\n\t var line1_to_y = newPath[1][2];\r\n\t\r\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\r\n\t var newLinePath = [];\r\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\r\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\r\n\t\r\n\t var line2_from_x = newLinePath[0][1];\r\n\t var line2_from_y = newLinePath[0][2];\r\n\t var line2_to_x = newLinePath[1][1];\r\n\t var line2_to_y = newLinePath[1][2];\r\n\t\r\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);\r\n\t if (res.onLine1 && res.onLine2) {\r\n\t\r\n\t var newSegment;\r\n\t if (line2_from_y === line2_to_y) {\r\n\t if (line2_from_x > line2_to_x) {\r\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t } else {\r\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t }\r\n\t } else {\r\n\t if (line2_from_y > line2_to_y) {\r\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t } else {\r\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\r\n\t lPath.splice(lP + 1, 0, newSegment);\r\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];\r\n\t lPath.splice(lP + 2, 0, newSegment);\r\n\t line.attr('path', lPath);\r\n\t }\r\n\t }\r\n\t\r\n\t lP += 2;\r\n\t len += 2;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t this.chart.lines.push(line);\r\n\t }\r\n\t\r\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\r\n\t this.chart.maxXFromLine = maxX;\r\n\t }\r\n\t};\r\n\t\r\n\tmodule.exports = Symbol;\r\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\r\n\t var i, len;\r\n\t var path = 'M{0},{1}';\r\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\r\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\r\n\t }\r\n\t var pathValues = [location.x, location.y];\r\n\t for (i = 0, len = points.length; i < len; i++) {\r\n\t pathValues.push(points[i].x);\r\n\t pathValues.push(points[i].y);\r\n\t }\r\n\t var symbol = chart.paper.path(path, pathValues);\r\n\t symbol.attr('stroke', chart.options['element-color']);\r\n\t symbol.attr('stroke-width', chart.options['line-width']);\r\n\t\r\n\t var font = chart.options.font;\r\n\t var fontF = chart.options['font-family'];\r\n\t var fontW = chart.options['font-weight'];\r\n\t\r\n\t if (font) symbol.attr({ 'font': font });\r\n\t if (fontF) symbol.attr({ 'font-family': fontF });\r\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\r\n\t\r\n\t return symbol;\r\n\t}\r\n\t\r\n\tfunction drawLine(chart, from, to, text) {\r\n\t var i, len;\r\n\t\r\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\r\n\t to = [to];\r\n\t }\r\n\t\r\n\t var path = 'M{0},{1}';\r\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\r\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\r\n\t }\r\n\t var pathValues = [from.x, from.y];\r\n\t for (i = 0, len = to.length; i < len; i++) {\r\n\t pathValues.push(to[i].x);\r\n\t pathValues.push(to[i].y);\r\n\t }\r\n\t\r\n\t var line = chart.paper.path(path, pathValues);\r\n\t line.attr({\r\n\t stroke: chart.options['line-color'],\r\n\t 'stroke-width': chart.options['line-width'],\r\n\t 'arrow-end': chart.options['arrow-end']\r\n\t });\r\n\t\r\n\t var font = chart.options.font;\r\n\t var fontF = chart.options['font-family'];\r\n\t var fontW = chart.options['font-weight'];\r\n\t\r\n\t if (font) line.attr({ 'font': font });\r\n\t if (fontF) line.attr({ 'font-family': fontF });\r\n\t if (fontW) line.attr({ 'font-weight': fontW });\r\n\t\r\n\t if (text) {\r\n\t\r\n\t var centerText = false;\r\n\t\r\n\t var textPath = chart.paper.text(0, 0, text);\r\n\t\r\n\t var isHorizontal = false;\r\n\t var firstTo = to[0];\r\n\t\r\n\t if (from.y === firstTo.y) {\r\n\t isHorizontal = true;\r\n\t }\r\n\t\r\n\t var x = 0,\r\n\t y = 0;\r\n\t\r\n\t if (centerText) {\r\n\t if (from.x > firstTo.x) {\r\n\t x = from.x - (from.x - firstTo.x)/2;\r\n\t } else {\r\n\t x = firstTo.x - (firstTo.x - from.x)/2;\r\n\t }\r\n\t\r\n\t if (from.y > firstTo.y) {\r\n\t y = from.y - (from.y - firstTo.y)/2;\r\n\t } else {\r\n\t y = firstTo.y - (firstTo.y - from.y)/2;\r\n\t }\r\n\t\r\n\t if (isHorizontal) {\r\n\t x -= textPath.getBBox().width/2;\r\n\t y -= chart.options['text-margin'];\r\n\t } else {\r\n\t x += chart.options['text-margin'];\r\n\t y -= textPath.getBBox().height/2;\r\n\t }\r\n\t } else {\r\n\t x = from.x;\r\n\t y = from.y;\r\n\t\r\n\t if (isHorizontal) {\r\n\t x += chart.options['text-margin']/2;\r\n\t y -= chart.options['text-margin'];\r\n\t } else {\r\n\t x += chart.options['text-margin']/2;\r\n\t y += chart.options['text-margin'];\r\n\t }\r\n\t }\r\n\t\r\n\t textPath.attr({\r\n\t 'text-anchor': 'start',\r\n\t 'font-size': chart.options['font-size'],\r\n\t 'fill': chart.options['font-color'],\r\n\t x: x,\r\n\t y: y\r\n\t });\r\n\t\r\n\t if (font) textPath.attr({ 'font': font });\r\n\t if (fontF) textPath.attr({ 'font-family': fontF });\r\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\r\n\t }\r\n\t\r\n\t return line;\r\n\t}\r\n\t\r\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\r\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\r\n\t var denominator, a, b, numerator1, numerator2, result = {\r\n\t x: null,\r\n\t y: null,\r\n\t onLine1: false,\r\n\t onLine2: false\r\n\t };\r\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\r\n\t if (denominator === 0) {\r\n\t return result;\r\n\t }\r\n\t a = line1StartY - line2StartY;\r\n\t b = line1StartX - line2StartX;\r\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\r\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\r\n\t a = numerator1 / denominator;\r\n\t b = numerator2 / denominator;\r\n\t\r\n\t // if we cast these lines infinitely in both directions, they intersect here:\r\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\r\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\r\n\t /*\r\n\t // it is worth noting that this should be the same as:\r\n\t x = line2StartX + (b * (line2EndX - line2StartX));\r\n\t y = line2StartX + (b * (line2EndY - line2StartY));\r\n\t */\r\n\t // if line1 is a segment and line2 is infinite, they intersect if:\r\n\t if (a > 0 && a < 1) {\r\n\t result.onLine1 = true;\r\n\t }\r\n\t // if line2 is a segment and line1 is infinite, they intersect if:\r\n\t if (b > 0 && b < 1) {\r\n\t result.onLine2 = true;\r\n\t }\r\n\t // if line1 and line2 are segments, they intersect if both of the above are true\r\n\t return result;\r\n\t}\r\n\t\r\n\tmodule.exports = {\r\n\t\tdrawPath: drawPath,\r\n\t\tdrawLine: drawLine,\r\n\t\tcheckLineIntersection: checkLineIntersection\r\n\t};\r\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\r\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\r\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\r\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\r\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\r\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\r\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\r\n\t\r\n\tfunction parse(input) {\r\n\t input = input || '';\r\n\t input = input.trim();\r\n\t\r\n\t var chart = {\r\n\t symbols: {},\r\n\t start: null,\r\n\t drawSVG: function(container, options) {\r\n\t var self = this;\r\n\t\r\n\t if (this.diagram) {\r\n\t this.diagram.clean();\r\n\t }\r\n\t\r\n\t var diagram = new FlowChart(container, options);\r\n\t this.diagram = diagram;\r\n\t var dispSymbols = {};\r\n\t\r\n\t function getDisplaySymbol(s) {\r\n\t if (dispSymbols[s.key]) {\r\n\t return dispSymbols[s.key];\r\n\t }\r\n\t\r\n\t switch (s.symbolType) {\r\n\t case 'start':\r\n\t dispSymbols[s.key] = new Start(diagram, s);\r\n\t break;\r\n\t case 'end':\r\n\t dispSymbols[s.key] = new End(diagram, s);\r\n\t break;\r\n\t case 'operation':\r\n\t dispSymbols[s.key] = new Operation(diagram, s);\r\n\t break;\r\n\t case 'inputoutput':\r\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \r\n\t break;\r\n\t case 'subroutine':\r\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\r\n\t break;\r\n\t case 'condition':\r\n\t dispSymbols[s.key] = new Condition(diagram, s);\r\n\t break;\r\n\t default:\r\n\t return new Error('Wrong symbol type!');\r\n\t }\r\n\t\r\n\t return dispSymbols[s.key];\r\n\t }\r\n\t\r\n\t (function constructChart(s, prevDisp, prev) {\r\n\t var dispSymb = getDisplaySymbol(s);\r\n\t\r\n\t if (self.start === s) {\r\n\t diagram.startWith(dispSymb);\r\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\r\n\t if (prevDisp instanceof(Condition)) {\r\n\t if (prev.yes === s) {\r\n\t prevDisp.yes(dispSymb);\r\n\t }\r\n\t if (prev.no === s) {\r\n\t prevDisp.no(dispSymb);\r\n\t }\r\n\t } else {\r\n\t prevDisp.then(dispSymb);\r\n\t }\r\n\t }\r\n\t\r\n\t if (dispSymb.pathOk) {\r\n\t return dispSymb;\r\n\t }\r\n\t\r\n\t if (dispSymb instanceof(Condition)) {\r\n\t if (s.yes) {\r\n\t constructChart(s.yes, dispSymb, s);\r\n\t }\r\n\t if (s.no) {\r\n\t constructChart(s.no, dispSymb, s);\r\n\t }\r\n\t } else if (s.next) {\r\n\t constructChart(s.next, dispSymb, s);\r\n\t }\r\n\t\r\n\t return dispSymb;\r\n\t })(this.start);\r\n\t\r\n\t diagram.render();\r\n\t },\r\n\t clean: function() {\r\n\t this.diagram.clean();\r\n\t }\r\n\t };\r\n\t\r\n\t var lines = [];\r\n\t var prevBreak = 0;\r\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\r\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\r\n\t var line0 = input.substring(prevBreak, i0);\r\n\t prevBreak = i0 + 1;\r\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\r\n\t }\r\n\t }\r\n\t\r\n\t if(prevBreak < input.length) {\r\n\t lines.push(input.substr(prevBreak));\r\n\t }\r\n\t\r\n\t for (var l = 1, len = lines.length; l < len;) {\r\n\t var currentLine = lines[l];\r\n\t\r\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\r\n\t lines[l - 1] += '\\n' + currentLine;\r\n\t lines.splice(l, 1);\r\n\t len--;\r\n\t } else {\r\n\t l++;\r\n\t }\r\n\t }\r\n\t\r\n\t function getStyle(s){\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t return s.substring(startIndex,endIndex);\r\n\t }\r\n\t return '{}';\r\n\t }\r\n\t\r\n\t function getSymbValue(s){\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t return s.substring(startIndex,endIndex);\r\n\t }\r\n\t return '';\r\n\t }\r\n\t\r\n\t function getSymbol(s) {\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \r\n\t }\r\n\t return chart.symbols[s];\r\n\t }\r\n\t\r\n\t function getNextPath(s) {\r\n\t var next = 'next';\r\n\t var startIndex = s.indexOf('(') + 1;\r\n\t var endIndex = s.indexOf(')');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t next = flowSymb.substring(startIndex, endIndex);\r\n\t if (next.indexOf(',') < 0) {\r\n\t if (next !== 'yes' && next !== 'no') {\r\n\t next = 'next, ' + next;\r\n\t }\r\n\t }\r\n\t }\r\n\t return next;\r\n\t }\r\n\t\r\n\t while (lines.length > 0) {\r\n\t var line = lines.splice(0, 1)[0].trim();\r\n\t\r\n\t if (line.indexOf('=>') >= 0) {\r\n\t // definition\r\n\t var parts = line.split('=>');\r\n\t var symbol = {\r\n\t key: parts[0].replace(/\\(.*\\)/, ''),\r\n\t symbolType: parts[1],\r\n\t text: null,\r\n\t link: null,\r\n\t target: null,\r\n\t flowstate: null,\r\n\t lineStyle: {},\r\n\t params: {}\r\n\t };\r\n\t\r\n\t //parse parameters\r\n\t var params = parts[0].match(/\\((.*)\\)/);\r\n\t if (params && params.length > 1){\r\n\t var entries = params[1].split(',');\r\n\t for(var i = 0; i < entries.length; i++) {\r\n\t var entry = entries[0].split('=');\r\n\t if (entry.length == 2){\r\n\t symbol.params[entry[0]] = entry[1];\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t var sub;\r\n\t\r\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\r\n\t sub = symbol.symbolType.split(': ');\r\n\t symbol.symbolType = sub.shift();\r\n\t symbol.text = sub.join(': ');\r\n\t }\r\n\t\r\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\r\n\t sub = symbol.text.split(':>');\r\n\t symbol.text = sub.shift();\r\n\t symbol.link = sub.join(':>');\r\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\r\n\t sub = symbol.symbolType.split(':>');\r\n\t symbol.symbolType = sub.shift();\r\n\t symbol.link = sub.join(':>');\r\n\t }\r\n\t\r\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\r\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\r\n\t }\r\n\t\r\n\t /* adding support for links */\r\n\t if (symbol.link) {\r\n\t var startIndex = symbol.link.indexOf('[') + 1;\r\n\t var endIndex = symbol.link.indexOf(']');\r\n\t if (startIndex >= 0 && endIndex >= 0) {\r\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\r\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\r\n\t }\r\n\t }\r\n\t /* end of link support */\r\n\t\r\n\t /* adding support for flowstates */\r\n\t if (symbol.text) {\r\n\t if (symbol.text.indexOf('|') >= 0) {\r\n\t var txtAndState = symbol.text.split('|');\r\n\t symbol.flowstate = txtAndState.pop().trim();\r\n\t symbol.text = txtAndState.join('|');\r\n\t }\r\n\t }\r\n\t /* end of flowstate support */\r\n\t\r\n\t chart.symbols[symbol.key] = symbol;\r\n\t\r\n\t } else if (line.indexOf('->') >= 0) {\r\n\t // flow\r\n\t var flowSymbols = line.split('->');\r\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\r\n\t var flowSymb = flowSymbols[i];\r\n\t var symbVal = getSymbValue(flowSymb);\r\n\t\r\n\t if (symbVal === 'true' || symbVal === 'false') {\r\n\t // map true or false to yes or no respectively\r\n\t flowSymb = flowSymb.replace('true', 'yes');\r\n\t flowSymb = flowSymb.replace('false', 'no');\r\n\t }\r\n\t\r\n\t var realSymb = getSymbol(flowSymb);\r\n\t var next = getNextPath(flowSymb);\r\n\t\r\n\t var direction = null;\r\n\t if (next.indexOf(',') >= 0) {\r\n\t var condOpt = next.split(',');\r\n\t next = condOpt[0];\r\n\t direction = condOpt[1].trim();\r\n\t }\r\n\t\r\n\t if (!chart.start) {\r\n\t chart.start = realSymb;\r\n\t }\r\n\t\r\n\t if (i + 1 < lenS) {\r\n\t var nextSymb = flowSymbols[i + 1];\r\n\t realSymb[next] = getSymbol(nextSymb);\r\n\t realSymb['direction_' + next] = direction;\r\n\t direction = null;\r\n\t }\r\n\t }\r\n\t } else if (line.indexOf('@>') >= 0) {\r\n\t\r\n\t // line style\r\n\t var lineStyleSymbols = line.split('@>');\r\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\r\n\t\r\n\t if ((i+1) != lenS){\r\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\r\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\r\n\t\r\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i+1]));\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t }\r\n\t return chart;\r\n\t}\r\n\t\r\n\tmodule.exports = parse;\r\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\r\n\tvar drawPath = drawAPI.drawPath;\r\n\t\r\n\tfunction Condition(chart, options) {\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options);\r\n\t this.textMargin = this.getAttr('text-margin');\r\n\t this.yes_direction = 'bottom';\r\n\t this.no_direction = 'right';\r\n\t this.params = options.params;\r\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\r\n\t if (options.direction_yes === 'right') {\r\n\t this.no_direction = 'bottom';\r\n\t this.yes_direction = 'right';\r\n\t } else {\r\n\t this.no_direction = 'right';\r\n\t this.yes_direction = 'bottom';\r\n\t }\r\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\r\n\t if (options.direction_no === 'right') {\r\n\t this.yes_direction = 'bottom';\r\n\t this.no_direction = 'right';\r\n\t } else {\r\n\t this.yes_direction = 'right';\r\n\t this.no_direction = 'bottom';\r\n\t }\r\n\t } else {\r\n\t this.yes_direction = 'bottom';\r\n\t this.no_direction = 'right';\r\n\t }\r\n\t\r\n\t this.yes_direction = this.yes_direction || 'bottom';\r\n\t this.no_direction = this.no_direction || 'right';\r\n\t\r\n\t this.text.attr({\r\n\t x: this.textMargin * 2\r\n\t });\r\n\t\r\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\r\n\t width += width/2;\r\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\r\n\t height += height/2;\r\n\t height = Math.max(width * 0.5, height);\r\n\t var startX = width/4;\r\n\t var startY = height/4;\r\n\t\r\n\t this.text.attr({\r\n\t x: startX + this.textMargin/2\r\n\t });\r\n\t\r\n\t var start = {x: startX, y: startY};\r\n\t var points = [\r\n\t {x: startX - width/4, y: startY + height/4},\r\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\r\n\t {x: startX - width/4 + width, y: startY + height/4},\r\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\r\n\t {x: startX - width/4, y: startY + height/4}\r\n\t ];\r\n\t\r\n\t var symbol = drawPath(chart, start, points);\r\n\t\r\n\t symbol.attr({\r\n\t stroke: this.getAttr('element-color'),\r\n\t 'stroke-width': this.getAttr('line-width'),\r\n\t fill: this.getAttr('fill')\r\n\t });\r\n\t if (options.link) { symbol.attr('href', options.link); }\r\n\t if (options.target) { symbol.attr('target', options.target); }\r\n\t if (options.key) { symbol.node.id = options.key; }\r\n\t symbol.node.setAttribute('class', this.getAttr('class'));\r\n\t\r\n\t this.text.attr({\r\n\t y: symbol.getBBox().height/2\r\n\t });\r\n\t\r\n\t this.group.push(symbol);\r\n\t symbol.insertBefore(this.text);\r\n\t\r\n\t this.initialize();\r\n\t}\r\n\tinherits(Condition, Symbol);\r\n\t\r\n\tCondition.prototype.render = function() {\r\n\t\r\n\t if (this.yes_direction) {\r\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\r\n\t }\r\n\t\r\n\t if (this.no_direction) {\r\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\r\n\t }\r\n\t\r\n\t var lineLength = this.getAttr('line-length');\r\n\t\r\n\t if (this.bottom_symbol) {\r\n\t var bottomPoint = this.getBottom();\r\n\t\r\n\t if (!this.bottom_symbol.isPositioned) {\r\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\r\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\r\n\t this.bottom_symbol.isPositioned = true;\r\n\t\r\n\t this.bottom_symbol.render();\r\n\t }\r\n\t }\r\n\t\r\n\t if (this.right_symbol) {\r\n\t var rightPoint = this.getRight();\r\n\t\r\n\t if (!this.right_symbol.isPositioned) {\r\n\t\r\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\r\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\t\r\n\t var self = this;\r\n\t (function shift() {\r\n\t var hasSymbolUnder = false;\r\n\t var symb;\r\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n\t symb = self.chart.symbols[i];\r\n\t\r\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \r\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\r\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\r\n\t hasSymbolUnder = true;\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t\r\n\t if (hasSymbolUnder) {\r\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\r\n\t shift();\r\n\t }\r\n\t })();\r\n\t\r\n\t this.right_symbol.isPositioned = true;\r\n\t\r\n\t this.right_symbol.render();\r\n\t }\r\n\t }\r\n\t};\r\n\t\r\n\tCondition.prototype.renderLines = function() {\r\n\t if (this.yes_symbol) {\r\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\r\n\t }\r\n\t\r\n\t if (this.no_symbol) {\r\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\r\n\t }\r\n\t};\r\n\t\r\n\tmodule.exports = Condition;\r\n\n\n/***/ }),\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\r\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\r\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\r\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\r\n\t\r\n\tfunction FlowChart(container, options) {\r\n\t options = options || {};\r\n\t\r\n\t this.paper = new Raphael(container);\r\n\t\r\n\t this.options = defaults(options, defaultOptions);\r\n\t\r\n\t this.symbols = [];\r\n\t this.lines = [];\r\n\t this.start = null;\r\n\t}\r\n\t\r\n\tFlowChart.prototype.handle = function(symbol) {\r\n\t if (this.symbols.indexOf(symbol) <= -1) {\r\n\t this.symbols.push(symbol);\r\n\t }\r\n\t\r\n\t var flowChart = this;\r\n\t\r\n\t if (symbol instanceof(Condition)) {\r\n\t symbol.yes = function(nextSymbol) {\r\n\t symbol.yes_symbol = nextSymbol;\r\n\t if(symbol.no_symbol) {\r\n\t symbol.pathOk = true;\r\n\t }\r\n\t return flowChart.handle(nextSymbol);\r\n\t };\r\n\t symbol.no = function(nextSymbol) {\r\n\t symbol.no_symbol = nextSymbol;\r\n\t if(symbol.yes_symbol) {\r\n\t symbol.pathOk = true;\r\n\t }\r\n\t return flowChart.handle(nextSymbol);\r\n\t };\r\n\t } else {\r\n\t symbol.then = function(nextSymbol) {\r\n\t symbol.next = nextSymbol;\r\n\t symbol.pathOk = true;\r\n\t return flowChart.handle(nextSymbol);\r\n\t };\r\n\t }\r\n\t\r\n\t return symbol;\r\n\t};\r\n\t\r\n\tFlowChart.prototype.startWith = function(symbol) {\r\n\t this.start = symbol;\r\n\t return this.handle(symbol);\r\n\t};\r\n\t\r\n\tFlowChart.prototype.render = function() {\r\n\t var maxWidth = 0,\r\n\t maxHeight = 0,\r\n\t i = 0,\r\n\t len = 0,\r\n\t maxX = 0,\r\n\t maxY = 0,\r\n\t minX = 0,\r\n\t minY = 0,\r\n\t symbol,\r\n\t line;\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t if (symbol.width > maxWidth) {\r\n\t maxWidth = symbol.width;\r\n\t }\r\n\t if (symbol.height > maxHeight) {\r\n\t maxHeight = symbol.height;\r\n\t }\r\n\t }\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\r\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\r\n\t }\r\n\t\r\n\t this.start.render();\r\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t // symbol = this.symbols[i];\r\n\t // symbol.render();\r\n\t // }\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t symbol.renderLines();\r\n\t }\r\n\t\r\n\t maxX = this.maxXFromLine;\r\n\t\r\n\t var x;\r\n\t var y;\r\n\t\r\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\r\n\t symbol = this.symbols[i];\r\n\t x = symbol.getX() + symbol.width;\r\n\t y = symbol.getY() + symbol.height;\r\n\t if (x > maxX) {\r\n\t maxX = x;\r\n\t }\r\n\t if (y > maxY) {\r\n\t maxY = y;\r\n\t }\r\n\t }\r\n\t\r\n\t for (i = 0, len = this.lines.length; i < len; i++) {\r\n\t line = this.lines[i].getBBox();\r\n\t x = line.x;\r\n\t y = line.y;\r\n\t var x2 = line.x2;\r\n\t var y2 = line.y2;\r\n\t if (x < minX) {\r\n\t minX = x;\r\n\t }\r\n\t if (y < minY) {\r\n\t minY = y;\r\n\t }\r\n\t if (x2 > maxX) {\r\n\t maxX = x2;\r\n\t }\r\n\t if (y2 > maxY) {\r\n\t maxY = y2;\r\n\t }\r\n\t }\r\n\t\r\n\t var scale = this.options['scale'];\r\n\t var lineWidth = this.options['line-width'];\r\n\t\r\n\t if (minX < 0) minX -= lineWidth;\r\n\t if (minY < 0) minY -= lineWidth;\r\n\t\r\n\t var width = maxX + lineWidth - minX;\r\n\t var height = maxY + lineWidth - minY;\r\n\t\r\n\t this.paper.setSize(width * scale, height * scale);\r\n\t this.paper.setViewBox(minX, minY, width, height, true);\r\n\t};\r\n\t\r\n\tFlowChart.prototype.clean = function() {\r\n\t if (this.paper) {\r\n\t var paperDom = this.paper.canvas;\r\n\t paperDom.parentNode.removeChild(paperDom);\r\n\t }\r\n\t};\r\n\t\r\n\tmodule.exports = FlowChart;\r\n\n\n/***/ }),\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\r\n\tmodule.exports = {\r\n\t 'x': 0,\r\n\t 'y': 0,\r\n\t 'line-width': 3,\r\n\t 'line-length': 50,\r\n\t 'text-margin': 10,\r\n\t 'font-size': 14,\r\n\t 'font-color': 'black',\r\n\t // 'font': 'normal',\r\n\t // 'font-family': 'calibri',\r\n\t // 'font-weight': 'normal',\r\n\t 'line-color': 'black',\r\n\t 'element-color': 'black',\r\n\t 'fill': 'white',\r\n\t 'yes-text': 'yes',\r\n\t 'no-text': 'no',\r\n\t 'arrow-end': 'block',\r\n\t 'class': 'flowchart',\r\n\t 'scale': 1,\r\n\t 'symbols': {\r\n\t 'start': {},\r\n\t 'end': {},\r\n\t 'condition': {},\r\n\t 'inputoutput': {},\r\n\t 'operation': {},\r\n\t 'subroutine': {}\r\n\t }//,\r\n\t // 'flowstate' : {\r\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\r\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\r\n\t // 'future' : { 'fill': '#FFFF99'},\r\n\t // 'invalid': {'fill': '#444444'}\r\n\t // }\r\n\t};\r\n\n\n/***/ }),\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\r\n\tif (!Array.prototype.indexOf) {\r\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\r\n\t \"use strict\";\r\n\t if (this === null) {\r\n\t throw new TypeError();\r\n\t }\r\n\t var t = Object(this);\r\n\t var len = t.length >>> 0;\r\n\t if (len === 0) {\r\n\t return -1;\r\n\t }\r\n\t var n = 0;\r\n\t if (arguments.length > 0) {\r\n\t n = Number(arguments[1]);\r\n\t if (n != n) { // shortcut for verifying if it's NaN\r\n\t n = 0;\r\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\r\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n\t }\r\n\t }\r\n\t if (n >= len) {\r\n\t return -1;\r\n\t }\r\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\r\n\t for (; k < len; k++) {\r\n\t if (k in t && t[k] === searchElement) {\r\n\t return k;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\t\r\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\r\n\tif (!Array.prototype.lastIndexOf) {\r\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\r\n\t \"use strict\";\r\n\t if (this === null) {\r\n\t throw new TypeError();\r\n\t }\r\n\t var t = Object(this);\r\n\t var len = t.length >>> 0;\r\n\t if (len === 0) {\r\n\t return -1;\r\n\t }\r\n\t var n = len;\r\n\t if (arguments.length > 1) {\r\n\t n = Number(arguments[1]);\r\n\t if (n != n) {\r\n\t n = 0;\r\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\r\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n\t }\r\n\t }\r\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\r\n\t for (; k >= 0; k--) {\r\n\t if (k in t && t[k] === searchElement) {\r\n\t return k;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\t\r\n\tif (!String.prototype.trim) {\r\n\t String.prototype.trim = function() {\r\n\t return this.replace(/^\\s+|\\s+$/g, '');\r\n\t };\r\n\t}\n\n/***/ }),\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction End(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n\t options = options || {};\r\n\t options.text = options.text || 'End';\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t}\r\n\tinherits(End, Symbol);\r\n\t\r\n\tmodule.exports = End;\r\n\n\n/***/ }),\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\r\n\tvar drawPath = drawAPI.drawPath;\r\n\t\r\n\tfunction InputOutput(chart, options) {\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options);\r\n\t this.textMargin = this.getAttr('text-margin');\r\n\t\r\n\t this.text.attr({\r\n\t x: this.textMargin * 3\r\n\t });\r\n\t\r\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\r\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\r\n\t var startX = this.textMargin;\r\n\t var startY = height/2;\r\n\t\r\n\t var start = {x: startX, y: startY};\r\n\t var points = [\r\n\t {x: startX - this.textMargin, y: height},\r\n\t {x: startX - this.textMargin + width, y: height},\r\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\r\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\r\n\t {x: startX, y: startY}\r\n\t ];\r\n\t\r\n\t var symbol = drawPath(chart, start, points);\r\n\t\r\n\t symbol.attr({\r\n\t stroke: this.getAttr('element-color'),\r\n\t 'stroke-width': this.getAttr('line-width'),\r\n\t fill: this.getAttr('fill')\r\n\t });\r\n\t if (options.link) { symbol.attr('href', options.link); }\r\n\t if (options.target) { symbol.attr('target', options.target); }\r\n\t if (options.key) { symbol.node.id = options.key; }\r\n\t symbol.node.setAttribute('class', this.getAttr('class'));\r\n\t\r\n\t this.text.attr({\r\n\t y: symbol.getBBox().height/2\r\n\t });\r\n\t\r\n\t this.group.push(symbol);\r\n\t symbol.insertBefore(this.text);\r\n\t\r\n\t this.initialize();\r\n\t}\r\n\tinherits(InputOutput, Symbol);\r\n\t\r\n\tInputOutput.prototype.getLeft = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX() + this.textMargin;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tInputOutput.prototype.getRight = function() {\r\n\t var y = this.getY() + this.group.getBBox().height/2;\r\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\r\n\t return {x: x, y: y};\r\n\t};\r\n\t\r\n\tmodule.exports = InputOutput;\r\n\n\n/***/ }),\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction Operation(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t}\r\n\tinherits(Operation, Symbol);\r\n\t\r\n\tmodule.exports = Operation;\r\n\n\n/***/ }),\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction Start(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n\t options = options || {};\r\n\t options.text = options.text || 'Start';\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t}\r\n\tinherits(Start, Symbol);\r\n\t\r\n\tmodule.exports = Start;\r\n\t\r\n\t// Start.prototype.render = function() {\r\n\t// if (this.next) {\r\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\r\n\t\r\n\t// var bottomPoint = this.getBottom();\r\n\t// var topPoint = this.next.getTop();\r\n\t\r\n\t// if (!this.next.isPositioned) {\r\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\r\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\r\n\t// this.next.isPositioned = true;\r\n\t\r\n\t// this.next.render();\r\n\t// }\r\n\t// }\r\n\t// };\r\n\t\r\n\t// Start.prototype.renderLines = function() {\r\n\t// if (this.next) {\r\n\t// this.drawLineTo(this.next);\r\n\t// }\r\n\t// };\r\n\n\n/***/ }),\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\r\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\r\n\t\r\n\tfunction Subroutine(chart, options) {\r\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\r\n\t options = options || {};\r\n\t Symbol.call(this, chart, options, symbol);\r\n\t\r\n\t symbol.attr({\r\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\r\n\t });\r\n\t\r\n\t this.text.attr({\r\n\t 'x': 2 * this.getAttr('text-margin')\r\n\t });\r\n\t\r\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\r\n\t innerWrap.attr({\r\n\t x: this.getAttr('text-margin'),\r\n\t stroke: this.getAttr('element-color'),\r\n\t 'stroke-width': this.getAttr('line-width'),\r\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\r\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\r\n\t fill: this.getAttr('fill')\r\n\t });\r\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\r\n\t\r\n\t var font = this.getAttr('font');\r\n\t var fontF = this.getAttr('font-family');\r\n\t var fontW = this.getAttr('font-weight');\r\n\t\r\n\t if (font) innerWrap.attr({ 'font': font });\r\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\r\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\r\n\t\r\n\t if (options.link) { innerWrap.attr('href', options.link); }\r\n\t if (options.target) { innerWrap.attr('target', options.target); }\r\n\t this.group.push(innerWrap);\r\n\t innerWrap.insertBefore(this.text);\r\n\t\r\n\t this.initialize();\r\n\t}\r\n\tinherits(Subroutine, Symbol);\r\n\t\r\n\tmodule.exports = Subroutine;\r\n\n\n/***/ }),\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\r\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\r\n\t\t(function( $ ) {\r\n\t\t\t$.fn.flowChart = function( options ) {\r\n\t\t\t\treturn this.each(function() {\r\n\t\t\t\t\tvar $this = $(this);\r\n\t\t\t\t\tvar chart = parse($this.text());\r\n\t\t\t\t\t$this.html('');\r\n\t\t\t\t\tchart.drawSVG(this, options);\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t})(jQuery); // eslint-disable-line\r\n\t}\r\n\n\n/***/ }),\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \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 56bd4e59d210a8507bce","require('./src/flowchart.shim');\r\nvar parse = require('./src/flowchart.parse');\r\nrequire('./src/jquery-plugin');\r\n\r\nvar FlowChart = {\r\n\tparse: parse\r\n};\r\n\r\nif (typeof window !== 'undefined') {\r\n\twindow.flowchart = FlowChart;\r\n}\r\n\r\nmodule.exports = FlowChart;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\r\n if (!options || typeof options === 'function') {\r\n return defaultOptions;\r\n }\r\n\r\n var merged = {};\r\n for (var attrname in defaultOptions) {\r\n merged[attrname] = defaultOptions[attrname];\r\n }\r\n\r\n for (attrname in options) {\r\n if (options[attrname]) {\r\n if (typeof merged[attrname] === 'object') {\r\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\r\n } else {\r\n merged[attrname] = options[attrname];\r\n }\r\n }\r\n }\r\n return merged;\r\n}\r\n\r\nfunction _inherits(ctor, superCtor) {\r\n if (typeof(Object.create) === 'function') {\r\n // implementation from standard node.js 'util' module\r\n ctor.super_ = superCtor;\r\n ctor.prototype = Object.create(superCtor.prototype, {\r\n constructor: {\r\n value: ctor,\r\n enumerable: false,\r\n writable: true,\r\n configurable: true\r\n }\r\n });\r\n } else {\r\n // old school shim for old browsers\r\n ctor.super_ = superCtor;\r\n var TempCtor = function () {};\r\n TempCtor.prototype = superCtor.prototype;\r\n ctor.prototype = new TempCtor();\r\n ctor.prototype.constructor = ctor;\r\n }\r\n}\r\n\r\n// move dependent functions to a container so that\r\n// they can be overriden easier in no jquery environment (node.js)\r\nmodule.exports = {\r\n defaults: _defaults,\r\n inherits: _inherits\r\n};\r\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');\r\nvar drawLine = drawAPI.drawLine;\r\nvar checkLineIntersection = drawAPI.checkLineIntersection;\r\n\r\nfunction Symbol(chart, options, symbol) {\r\n this.chart = chart;\r\n this.group = this.chart.paper.set();\r\n this.symbol = symbol;\r\n this.connectedTo = [];\r\n this.symbolType = options.symbolType;\r\n this.flowstate = (options.flowstate || 'future');\r\n this.lineStyle = (options.lineStyle || {});\r\n this.key = (options.key || '');\r\n\r\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\r\n\r\n this.text = this.chart.paper.text(0, 0, options.text);\r\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\r\n if (options.key) { this.text.node.id = options.key + 't'; }\r\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\r\n\r\n this.text.attr({\r\n 'text-anchor': 'start',\r\n 'x' : this.getAttr('text-margin'),\r\n 'fill' : this.getAttr('font-color'),\r\n 'font-size' : this.getAttr('font-size')\r\n });\r\n\r\n var font = this.getAttr('font');\r\n var fontF = this.getAttr('font-family');\r\n var fontW = this.getAttr('font-weight');\r\n\r\n if (font) this.text.attr({ 'font': font });\r\n if (fontF) this.text.attr({ 'font-family': fontF });\r\n if (fontW) this.text.attr({ 'font-weight': fontW });\r\n\r\n if (options.link) { this.text.attr('href', options.link); }\r\n if (options.target) { this.text.attr('target', options.target); }\r\n\r\n var maxWidth = this.getAttr('maxWidth');\r\n if (maxWidth) {\r\n // using this approach: http://stackoverflow.com/a/3153457/22466\r\n var words = options.text.split(' ');\r\n var tempText = \"\";\r\n for (var i=0, ii=words.length; i maxWidth) {\r\n tempText += \"\\n\" + word;\r\n } else {\r\n tempText += \" \" + word;\r\n }\r\n }\r\n this.text.attr(\"text\", tempText.substring(1));\r\n }\r\n\r\n this.group.push(this.text);\r\n\r\n if (symbol) {\r\n var tmpMargin = this.getAttr('text-margin');\r\n\r\n symbol.attr({\r\n 'fill' : this.getAttr('fill'),\r\n 'stroke' : this.getAttr('element-color'),\r\n 'stroke-width' : this.getAttr('line-width'),\r\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\r\n 'height' : this.text.getBBox().height + 2 * tmpMargin\r\n });\r\n\r\n symbol.node.setAttribute('class', this.getAttr('class'));\r\n\r\n if (options.link) { symbol.attr('href', options.link); }\r\n if (options.target) { symbol.attr('target', options.target); }\r\n if (options.key) { symbol.node.id = options.key; }\r\n\r\n this.group.push(symbol);\r\n symbol.insertBefore(this.text);\r\n\r\n this.text.attr({\r\n 'y': symbol.getBBox().height/2\r\n });\r\n\r\n this.initialize();\r\n }\r\n\r\n}\r\n\r\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\r\nSymbol.prototype.getAttr = function(attName) {\r\n if (!this.chart) {\r\n return undefined;\r\n }\r\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\r\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\r\n var opt1;\r\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\r\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\r\n }\r\n return (opt1 || opt2 || opt3);\r\n};\r\n\r\nSymbol.prototype.initialize = function() {\r\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\r\n\r\n this.width = this.group.getBBox().width;\r\n this.height = this.group.getBBox().height;\r\n};\r\n\r\nSymbol.prototype.getCenter = function() {\r\n return {x: this.getX() + this.width/2,\r\n y: this.getY() + this.height/2};\r\n};\r\n\r\nSymbol.prototype.getX = function() {\r\n return this.group.getBBox().x;\r\n};\r\n\r\nSymbol.prototype.getY = function() {\r\n return this.group.getBBox().y;\r\n};\r\n\r\nSymbol.prototype.shiftX = function(x) {\r\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\r\n};\r\n\r\nSymbol.prototype.setX = function(x) {\r\n this.group.transform('t' + x + ',' + this.getY());\r\n};\r\n\r\nSymbol.prototype.shiftY = function(y) {\r\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\r\n};\r\n\r\nSymbol.prototype.setY = function(y) {\r\n this.group.transform('t' + this.getX() + ',' + y);\r\n};\r\n\r\nSymbol.prototype.getTop = function() {\r\n var y = this.getY();\r\n var x = this.getX() + this.width/2;\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.getBottom = function() {\r\n var y = this.getY() + this.height;\r\n var x = this.getX() + this.width/2;\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.getLeft = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX();\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.getRight = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX() + this.group.getBBox().width;\r\n return {x: x, y: y};\r\n};\r\n\r\nSymbol.prototype.render = function() {\r\n if (this.next) {\r\n\r\n var lineLength = this.getAttr('line-length');\r\n\r\n if (this.next_direction === 'right') {\r\n\r\n var rightPoint = this.getRight();\r\n\r\n if (!this.next.isPositioned) {\r\n\r\n this.next.setY(rightPoint.y - this.next.height/2);\r\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\r\n var self = this;\r\n (function shift() {\r\n var hasSymbolUnder = false;\r\n var symb;\r\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n symb = self.chart.symbols[i];\r\n\r\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\r\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\r\n hasSymbolUnder = true;\r\n break;\r\n }\r\n }\r\n\r\n if (hasSymbolUnder) {\r\n self.next.setX(symb.getX() + symb.width + lineLength);\r\n shift();\r\n }\r\n })();\r\n\r\n this.next.isPositioned = true;\r\n\r\n this.next.render();\r\n }\r\n } else {\r\n var bottomPoint = this.getBottom();\r\n\r\n if (!this.next.isPositioned) {\r\n this.next.shiftY(this.getY() + this.height + lineLength);\r\n this.next.setX(bottomPoint.x - this.next.width/2);\r\n this.next.isPositioned = true;\r\n\r\n this.next.render();\r\n }\r\n }\r\n }\r\n};\r\n\r\nSymbol.prototype.renderLines = function() {\r\n if (this.next) {\r\n if (this.next_direction) {\r\n this.drawLineTo(this.next, '', this.next_direction);\r\n } else {\r\n this.drawLineTo(this.next);\r\n }\r\n }\r\n};\r\n\r\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\r\n if (this.connectedTo.indexOf(symbol) < 0) {\r\n this.connectedTo.push(symbol);\r\n }\r\n\r\n var x = this.getCenter().x,\r\n y = this.getCenter().y,\r\n right = this.getRight(),\r\n bottom = this.getBottom(),\r\n left = this.getLeft();\r\n\r\n var symbolX = symbol.getCenter().x,\r\n symbolY = symbol.getCenter().y,\r\n symbolTop = symbol.getTop(),\r\n symbolRight = symbol.getRight(),\r\n symbolLeft = symbol.getLeft();\r\n\r\n var isOnSameColumn = x === symbolX,\r\n isOnSameLine = y === symbolY,\r\n isUnder = y < symbolY,\r\n isUpper = y > symbolY || this === symbol,\r\n isLeft = x > symbolX,\r\n isRight = x < symbolX;\r\n\r\n var maxX = 0,\r\n line,\r\n lineLength = this.getAttr('line-length'),\r\n lineWith = this.getAttr('line-width');\r\n\r\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\r\n line = drawLine(this.chart, bottom, symbolTop, text);\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x;\r\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\r\n line = drawLine(this.chart, right, symbolLeft, text);\r\n this.rightStart = true;\r\n symbol.leftEnd = true;\r\n maxX = symbolLeft.x;\r\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\r\n line = drawLine(this.chart, left, symbolRight, text);\r\n this.leftStart = true;\r\n symbol.rightEnd = true;\r\n maxX = symbolRight.x;\r\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\r\n line = drawLine(this.chart, right, [\r\n {x: right.x + lineLength/2, y: right.y},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\r\n line = drawLine(this.chart, right, [\r\n {x: right.x + lineLength/2, y: right.y},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((!origin || origin === 'bottom') && isLeft) {\r\n if (this.leftEnd && isUpper) {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n } else {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n }\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n } else if ((!origin || origin === 'bottom') && isRight) {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\r\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\r\n } else if ((origin && origin === 'right') && isLeft) {\r\n line = drawLine(this.chart, right, [\r\n {x: right.x + lineLength/2, y: right.y},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((origin && origin === 'right') && isRight) {\r\n line = drawLine(this.chart, right, [\r\n {x: symbolTop.x, y: right.y},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.rightStart = true;\r\n symbol.topEnd = true;\r\n maxX = right.x + lineLength/2;\r\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\r\n line = drawLine(this.chart, bottom, [\r\n {x: bottom.x, y: bottom.y + lineLength/2},\r\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\r\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.bottomStart = true;\r\n symbol.topEnd = true;\r\n maxX = bottom.x + lineLength/2;\r\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\r\n var diffX = left.x - lineLength/2;\r\n if (symbolLeft.x < left.x) {\r\n diffX = symbolLeft.x - lineLength/2;\r\n }\r\n line = drawLine(this.chart, left, [\r\n {x: diffX, y: left.y},\r\n {x: diffX, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.leftStart = true;\r\n symbol.topEnd = true;\r\n maxX = left.x;\r\n } else if ((origin === 'left')) {\r\n line = drawLine(this.chart, left, [\r\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\r\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\r\n {x: symbolTop.x, y: symbolTop.y}\r\n ], text);\r\n this.leftStart = true;\r\n symbol.topEnd = true;\r\n maxX = left.x;\r\n }\r\n\r\n //update line style\r\n if (this.lineStyle[symbol.key] && line){\r\n line.attr( this.lineStyle[symbol.key]);\r\n }\r\n\r\n if (line) {\r\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\r\n var otherLine = this.chart.lines[l];\r\n var len;\r\n\r\n var ePath = otherLine.attr('path'),\r\n lPath = line.attr('path');\r\n\r\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\r\n var newPath = [];\r\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\r\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\r\n\r\n var line1_from_x = newPath[0][1];\r\n var line1_from_y = newPath[0][2];\r\n var line1_to_x = newPath[1][1];\r\n var line1_to_y = newPath[1][2];\r\n\r\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\r\n var newLinePath = [];\r\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\r\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\r\n\r\n var line2_from_x = newLinePath[0][1];\r\n var line2_from_y = newLinePath[0][2];\r\n var line2_to_x = newLinePath[1][1];\r\n var line2_to_y = newLinePath[1][2];\r\n\r\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);\r\n if (res.onLine1 && res.onLine2) {\r\n\r\n var newSegment;\r\n if (line2_from_y === line2_to_y) {\r\n if (line2_from_x > line2_to_x) {\r\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n } else {\r\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n }\r\n } else {\r\n if (line2_from_y > line2_to_y) {\r\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n } else {\r\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\r\n lPath.splice(lP + 1, 0, newSegment);\r\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\r\n lPath.splice(lP + 2, 0, newSegment);\r\n line.attr('path', lPath);\r\n }\r\n }\r\n\r\n lP += 2;\r\n len += 2;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.chart.lines.push(line);\r\n }\r\n\r\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\r\n this.chart.maxXFromLine = maxX;\r\n }\r\n};\r\n\r\nmodule.exports = Symbol;\r\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) {\r\n var i, len;\r\n var path = 'M{0},{1}';\r\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\r\n path += ' L{' + i + '},{' + (i + 1) + '}';\r\n }\r\n var pathValues = [location.x, location.y];\r\n for (i = 0, len = points.length; i < len; i++) {\r\n pathValues.push(points[i].x);\r\n pathValues.push(points[i].y);\r\n }\r\n var symbol = chart.paper.path(path, pathValues);\r\n symbol.attr('stroke', chart.options['element-color']);\r\n symbol.attr('stroke-width', chart.options['line-width']);\r\n\r\n var font = chart.options.font;\r\n var fontF = chart.options['font-family'];\r\n var fontW = chart.options['font-weight'];\r\n\r\n if (font) symbol.attr({ 'font': font });\r\n if (fontF) symbol.attr({ 'font-family': fontF });\r\n if (fontW) symbol.attr({ 'font-weight': fontW });\r\n\r\n return symbol;\r\n}\r\n\r\nfunction drawLine(chart, from, to, text) {\r\n var i, len;\r\n\r\n if (Object.prototype.toString.call(to) !== '[object Array]') {\r\n to = [to];\r\n }\r\n\r\n var path = 'M{0},{1}';\r\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\r\n path += ' L{' + i + '},{' + (i + 1) + '}';\r\n }\r\n var pathValues = [from.x, from.y];\r\n for (i = 0, len = to.length; i < len; i++) {\r\n pathValues.push(to[i].x);\r\n pathValues.push(to[i].y);\r\n }\r\n\r\n var line = chart.paper.path(path, pathValues);\r\n line.attr({\r\n stroke: chart.options['line-color'],\r\n 'stroke-width': chart.options['line-width'],\r\n 'arrow-end': chart.options['arrow-end']\r\n });\r\n\r\n var font = chart.options.font;\r\n var fontF = chart.options['font-family'];\r\n var fontW = chart.options['font-weight'];\r\n\r\n if (font) line.attr({ 'font': font });\r\n if (fontF) line.attr({ 'font-family': fontF });\r\n if (fontW) line.attr({ 'font-weight': fontW });\r\n\r\n if (text) {\r\n\r\n var centerText = false;\r\n\r\n var textPath = chart.paper.text(0, 0, text);\r\n\r\n var isHorizontal = false;\r\n var firstTo = to[0];\r\n\r\n if (from.y === firstTo.y) {\r\n isHorizontal = true;\r\n }\r\n\r\n var x = 0,\r\n y = 0;\r\n\r\n if (centerText) {\r\n if (from.x > firstTo.x) {\r\n x = from.x - (from.x - firstTo.x)/2;\r\n } else {\r\n x = firstTo.x - (firstTo.x - from.x)/2;\r\n }\r\n\r\n if (from.y > firstTo.y) {\r\n y = from.y - (from.y - firstTo.y)/2;\r\n } else {\r\n y = firstTo.y - (firstTo.y - from.y)/2;\r\n }\r\n\r\n if (isHorizontal) {\r\n x -= textPath.getBBox().width/2;\r\n y -= chart.options['text-margin'];\r\n } else {\r\n x += chart.options['text-margin'];\r\n y -= textPath.getBBox().height/2;\r\n }\r\n } else {\r\n x = from.x;\r\n y = from.y;\r\n\r\n if (isHorizontal) {\r\n x += chart.options['text-margin']/2;\r\n y -= chart.options['text-margin'];\r\n } else {\r\n x += chart.options['text-margin']/2;\r\n y += chart.options['text-margin'];\r\n }\r\n }\r\n\r\n textPath.attr({\r\n 'text-anchor': 'start',\r\n 'font-size': chart.options['font-size'],\r\n 'fill': chart.options['font-color'],\r\n x: x,\r\n y: y\r\n });\r\n\r\n if (font) textPath.attr({ 'font': font });\r\n if (fontF) textPath.attr({ 'font-family': fontF });\r\n if (fontW) textPath.attr({ 'font-weight': fontW });\r\n }\r\n\r\n return line;\r\n}\r\n\r\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\r\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\r\n var denominator, a, b, numerator1, numerator2, result = {\r\n x: null,\r\n y: null,\r\n onLine1: false,\r\n onLine2: false\r\n };\r\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\r\n if (denominator === 0) {\r\n return result;\r\n }\r\n a = line1StartY - line2StartY;\r\n b = line1StartX - line2StartX;\r\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\r\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\r\n a = numerator1 / denominator;\r\n b = numerator2 / denominator;\r\n\r\n // if we cast these lines infinitely in both directions, they intersect here:\r\n result.x = line1StartX + (a * (line1EndX - line1StartX));\r\n result.y = line1StartY + (a * (line1EndY - line1StartY));\r\n /*\r\n // it is worth noting that this should be the same as:\r\n x = line2StartX + (b * (line2EndX - line2StartX));\r\n y = line2StartX + (b * (line2EndY - line2StartY));\r\n */\r\n // if line1 is a segment and line2 is infinite, they intersect if:\r\n if (a > 0 && a < 1) {\r\n result.onLine1 = true;\r\n }\r\n // if line2 is a segment and line1 is infinite, they intersect if:\r\n if (b > 0 && b < 1) {\r\n result.onLine2 = true;\r\n }\r\n // if line1 and line2 are segments, they intersect if both of the above are true\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n\tdrawPath: drawPath,\r\n\tdrawLine: drawLine,\r\n\tcheckLineIntersection: checkLineIntersection\r\n};\r\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');\r\nvar Start = require('./flowchart.symbol.start');\r\nvar End = require('./flowchart.symbol.end');\r\nvar Operation = require('./flowchart.symbol.operation');\r\nvar InputOutput = require('./flowchart.symbol.inputoutput');\r\nvar Subroutine = require('./flowchart.symbol.subroutine');\r\nvar Condition = require('./flowchart.symbol.condition');\r\n\r\nfunction parse(input) {\r\n input = input || '';\r\n input = input.trim();\r\n\r\n var chart = {\r\n symbols: {},\r\n start: null,\r\n drawSVG: function(container, options) {\r\n var self = this;\r\n\r\n if (this.diagram) {\r\n this.diagram.clean();\r\n }\r\n\r\n var diagram = new FlowChart(container, options);\r\n this.diagram = diagram;\r\n var dispSymbols = {};\r\n\r\n function getDisplaySymbol(s) {\r\n if (dispSymbols[s.key]) {\r\n return dispSymbols[s.key];\r\n }\r\n\r\n switch (s.symbolType) {\r\n case 'start':\r\n dispSymbols[s.key] = new Start(diagram, s);\r\n break;\r\n case 'end':\r\n dispSymbols[s.key] = new End(diagram, s);\r\n break;\r\n case 'operation':\r\n dispSymbols[s.key] = new Operation(diagram, s);\r\n break;\r\n case 'inputoutput':\r\n dispSymbols[s.key] = new InputOutput(diagram, s); \r\n break;\r\n case 'subroutine':\r\n dispSymbols[s.key] = new Subroutine(diagram, s);\r\n break;\r\n case 'condition':\r\n dispSymbols[s.key] = new Condition(diagram, s);\r\n break;\r\n default:\r\n return new Error('Wrong symbol type!');\r\n }\r\n\r\n return dispSymbols[s.key];\r\n }\r\n\r\n (function constructChart(s, prevDisp, prev) {\r\n var dispSymb = getDisplaySymbol(s);\r\n\r\n if (self.start === s) {\r\n diagram.startWith(dispSymb);\r\n } else if (prevDisp && prev && !prevDisp.pathOk) {\r\n if (prevDisp instanceof(Condition)) {\r\n if (prev.yes === s) {\r\n prevDisp.yes(dispSymb);\r\n }\r\n if (prev.no === s) {\r\n prevDisp.no(dispSymb);\r\n }\r\n } else {\r\n prevDisp.then(dispSymb);\r\n }\r\n }\r\n\r\n if (dispSymb.pathOk) {\r\n return dispSymb;\r\n }\r\n\r\n if (dispSymb instanceof(Condition)) {\r\n if (s.yes) {\r\n constructChart(s.yes, dispSymb, s);\r\n }\r\n if (s.no) {\r\n constructChart(s.no, dispSymb, s);\r\n }\r\n } else if (s.next) {\r\n constructChart(s.next, dispSymb, s);\r\n }\r\n\r\n return dispSymb;\r\n })(this.start);\r\n\r\n diagram.render();\r\n },\r\n clean: function() {\r\n this.diagram.clean();\r\n }\r\n };\r\n\r\n var lines = [];\r\n var prevBreak = 0;\r\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\r\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\r\n var line0 = input.substring(prevBreak, i0);\r\n prevBreak = i0 + 1;\r\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\r\n }\r\n }\r\n\r\n if(prevBreak < input.length) {\r\n lines.push(input.substr(prevBreak));\r\n }\r\n\r\n for (var l = 1, len = lines.length; l < len;) {\r\n var currentLine = lines[l];\r\n\r\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\r\n lines[l - 1] += '\\n' + currentLine;\r\n lines.splice(l, 1);\r\n len--;\r\n } else {\r\n l++;\r\n }\r\n }\r\n\r\n function getStyle(s){\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n return s.substring(startIndex,endIndex);\r\n }\r\n return '{}';\r\n }\r\n\r\n function getSymbValue(s){\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n return s.substring(startIndex,endIndex);\r\n }\r\n return '';\r\n }\r\n\r\n function getSymbol(s) {\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n return chart.symbols[s.substring(0, startIndex - 1)]; \r\n }\r\n return chart.symbols[s];\r\n }\r\n\r\n function getNextPath(s) {\r\n var next = 'next';\r\n var startIndex = s.indexOf('(') + 1;\r\n var endIndex = s.indexOf(')');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n next = flowSymb.substring(startIndex, endIndex);\r\n if (next.indexOf(',') < 0) {\r\n if (next !== 'yes' && next !== 'no') {\r\n next = 'next, ' + next;\r\n }\r\n }\r\n }\r\n return next;\r\n }\r\n\r\n while (lines.length > 0) {\r\n var line = lines.splice(0, 1)[0].trim();\r\n\r\n if (line.indexOf('=>') >= 0) {\r\n // definition\r\n var parts = line.split('=>');\r\n var symbol = {\r\n key: parts[0].replace(/\\(.*\\)/, ''),\r\n symbolType: parts[1],\r\n text: null,\r\n link: null,\r\n target: null,\r\n flowstate: null,\r\n lineStyle: {},\r\n params: {}\r\n };\r\n\r\n //parse parameters\r\n var params = parts[0].match(/\\((.*)\\)/);\r\n if (params && params.length > 1){\r\n var entries = params[1].split(',');\r\n for(var i = 0; i < entries.length; i++) {\r\n var entry = entries[0].split('=');\r\n if (entry.length == 2){\r\n symbol.params[entry[0]] = entry[1];\r\n }\r\n }\r\n }\r\n\r\n var sub;\r\n\r\n if (symbol.symbolType.indexOf(': ') >= 0) {\r\n sub = symbol.symbolType.split(': ');\r\n symbol.symbolType = sub.shift();\r\n symbol.text = sub.join(': ');\r\n }\r\n\r\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\r\n sub = symbol.text.split(':>');\r\n symbol.text = sub.shift();\r\n symbol.link = sub.join(':>');\r\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\r\n sub = symbol.symbolType.split(':>');\r\n symbol.symbolType = sub.shift();\r\n symbol.link = sub.join(':>');\r\n }\r\n\r\n if (symbol.symbolType.indexOf('\\n') >= 0) {\r\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\r\n }\r\n\r\n /* adding support for links */\r\n if (symbol.link) {\r\n var startIndex = symbol.link.indexOf('[') + 1;\r\n var endIndex = symbol.link.indexOf(']');\r\n if (startIndex >= 0 && endIndex >= 0) {\r\n symbol.target = symbol.link.substring(startIndex, endIndex);\r\n symbol.link = symbol.link.substring(0, startIndex - 1);\r\n }\r\n }\r\n /* end of link support */\r\n\r\n /* adding support for flowstates */\r\n if (symbol.text) {\r\n if (symbol.text.indexOf('|') >= 0) {\r\n var txtAndState = symbol.text.split('|');\r\n symbol.flowstate = txtAndState.pop().trim();\r\n symbol.text = txtAndState.join('|');\r\n }\r\n }\r\n /* end of flowstate support */\r\n\r\n chart.symbols[symbol.key] = symbol;\r\n\r\n } else if (line.indexOf('->') >= 0) {\r\n // flow\r\n var flowSymbols = line.split('->');\r\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\r\n var flowSymb = flowSymbols[i];\r\n var symbVal = getSymbValue(flowSymb);\r\n\r\n if (symbVal === 'true' || symbVal === 'false') {\r\n // map true or false to yes or no respectively\r\n flowSymb = flowSymb.replace('true', 'yes');\r\n flowSymb = flowSymb.replace('false', 'no');\r\n }\r\n\r\n var realSymb = getSymbol(flowSymb);\r\n var next = getNextPath(flowSymb);\r\n\r\n var direction = null;\r\n if (next.indexOf(',') >= 0) {\r\n var condOpt = next.split(',');\r\n next = condOpt[0];\r\n direction = condOpt[1].trim();\r\n }\r\n\r\n if (!chart.start) {\r\n chart.start = realSymb;\r\n }\r\n\r\n if (i + 1 < lenS) {\r\n var nextSymb = flowSymbols[i + 1];\r\n realSymb[next] = getSymbol(nextSymb);\r\n realSymb['direction_' + next] = direction;\r\n direction = null;\r\n }\r\n }\r\n } else if (line.indexOf('@>') >= 0) {\r\n\r\n // line style\r\n var lineStyleSymbols = line.split('@>');\r\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\r\n\r\n if ((i+1) != lenS){\r\n var curSymb = getSymbol(lineStyleSymbols[i]);\r\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\r\n\r\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i+1]));\r\n }\r\n }\r\n }\r\n\r\n }\r\n return chart;\r\n}\r\n\r\nmodule.exports = parse;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\nvar drawAPI = require('./flowchart.functions');\r\nvar drawPath = drawAPI.drawPath;\r\n\r\nfunction Condition(chart, options) {\r\n options = options || {};\r\n Symbol.call(this, chart, options);\r\n this.textMargin = this.getAttr('text-margin');\r\n this.yes_direction = 'bottom';\r\n this.no_direction = 'right';\r\n this.params = options.params;\r\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\r\n if (options.direction_yes === 'right') {\r\n this.no_direction = 'bottom';\r\n this.yes_direction = 'right';\r\n } else {\r\n this.no_direction = 'right';\r\n this.yes_direction = 'bottom';\r\n }\r\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\r\n if (options.direction_no === 'right') {\r\n this.yes_direction = 'bottom';\r\n this.no_direction = 'right';\r\n } else {\r\n this.yes_direction = 'right';\r\n this.no_direction = 'bottom';\r\n }\r\n } else {\r\n this.yes_direction = 'bottom';\r\n this.no_direction = 'right';\r\n }\r\n\r\n this.yes_direction = this.yes_direction || 'bottom';\r\n this.no_direction = this.no_direction || 'right';\r\n\r\n this.text.attr({\r\n x: this.textMargin * 2\r\n });\r\n\r\n var width = this.text.getBBox().width + 3 * this.textMargin;\r\n width += width/2;\r\n var height = this.text.getBBox().height + 2 * this.textMargin;\r\n height += height/2;\r\n height = Math.max(width * 0.5, height);\r\n var startX = width/4;\r\n var startY = height/4;\r\n\r\n this.text.attr({\r\n x: startX + this.textMargin/2\r\n });\r\n\r\n var start = {x: startX, y: startY};\r\n var points = [\r\n {x: startX - width/4, y: startY + height/4},\r\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\r\n {x: startX - width/4 + width, y: startY + height/4},\r\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\r\n {x: startX - width/4, y: startY + height/4}\r\n ];\r\n\r\n var symbol = drawPath(chart, start, points);\r\n\r\n symbol.attr({\r\n stroke: this.getAttr('element-color'),\r\n 'stroke-width': this.getAttr('line-width'),\r\n fill: this.getAttr('fill')\r\n });\r\n if (options.link) { symbol.attr('href', options.link); }\r\n if (options.target) { symbol.attr('target', options.target); }\r\n if (options.key) { symbol.node.id = options.key; }\r\n symbol.node.setAttribute('class', this.getAttr('class'));\r\n\r\n this.text.attr({\r\n y: symbol.getBBox().height/2\r\n });\r\n\r\n this.group.push(symbol);\r\n symbol.insertBefore(this.text);\r\n\r\n this.initialize();\r\n}\r\ninherits(Condition, Symbol);\r\n\r\nCondition.prototype.render = function() {\r\n\r\n if (this.yes_direction) {\r\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\r\n }\r\n\r\n if (this.no_direction) {\r\n this[this.no_direction + '_symbol'] = this.no_symbol;\r\n }\r\n\r\n var lineLength = this.getAttr('line-length');\r\n\r\n if (this.bottom_symbol) {\r\n var bottomPoint = this.getBottom();\r\n\r\n if (!this.bottom_symbol.isPositioned) {\r\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\r\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\r\n this.bottom_symbol.isPositioned = true;\r\n\r\n this.bottom_symbol.render();\r\n }\r\n }\r\n\r\n if (this.right_symbol) {\r\n var rightPoint = this.getRight();\r\n\r\n if (!this.right_symbol.isPositioned) {\r\n\r\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\r\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\r\n\r\n var self = this;\r\n (function shift() {\r\n var hasSymbolUnder = false;\r\n var symb;\r\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\r\n symb = self.chart.symbols[i];\r\n\r\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \r\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\r\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\r\n hasSymbolUnder = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (hasSymbolUnder) {\r\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\r\n shift();\r\n }\r\n })();\r\n\r\n this.right_symbol.isPositioned = true;\r\n\r\n this.right_symbol.render();\r\n }\r\n }\r\n};\r\n\r\nCondition.prototype.renderLines = function() {\r\n if (this.yes_symbol) {\r\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\r\n }\r\n\r\n if (this.no_symbol) {\r\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\r\n }\r\n};\r\n\r\nmodule.exports = Condition;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Raphael = require('raphael');\r\nvar defaults = require('./flowchart.helpers').defaults;\r\nvar defaultOptions = require('./flowchart.defaults');\r\nvar Condition = require('./flowchart.symbol.condition');\r\n\r\nfunction FlowChart(container, options) {\r\n options = options || {};\r\n\r\n this.paper = new Raphael(container);\r\n\r\n this.options = defaults(options, defaultOptions);\r\n\r\n this.symbols = [];\r\n this.lines = [];\r\n this.start = null;\r\n}\r\n\r\nFlowChart.prototype.handle = function(symbol) {\r\n if (this.symbols.indexOf(symbol) <= -1) {\r\n this.symbols.push(symbol);\r\n }\r\n\r\n var flowChart = this;\r\n\r\n if (symbol instanceof(Condition)) {\r\n symbol.yes = function(nextSymbol) {\r\n symbol.yes_symbol = nextSymbol;\r\n if(symbol.no_symbol) {\r\n symbol.pathOk = true;\r\n }\r\n return flowChart.handle(nextSymbol);\r\n };\r\n symbol.no = function(nextSymbol) {\r\n symbol.no_symbol = nextSymbol;\r\n if(symbol.yes_symbol) {\r\n symbol.pathOk = true;\r\n }\r\n return flowChart.handle(nextSymbol);\r\n };\r\n } else {\r\n symbol.then = function(nextSymbol) {\r\n symbol.next = nextSymbol;\r\n symbol.pathOk = true;\r\n return flowChart.handle(nextSymbol);\r\n };\r\n }\r\n\r\n return symbol;\r\n};\r\n\r\nFlowChart.prototype.startWith = function(symbol) {\r\n this.start = symbol;\r\n return this.handle(symbol);\r\n};\r\n\r\nFlowChart.prototype.render = function() {\r\n var maxWidth = 0,\r\n maxHeight = 0,\r\n i = 0,\r\n len = 0,\r\n maxX = 0,\r\n maxY = 0,\r\n minX = 0,\r\n minY = 0,\r\n symbol,\r\n line;\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n if (symbol.width > maxWidth) {\r\n maxWidth = symbol.width;\r\n }\r\n if (symbol.height > maxHeight) {\r\n maxHeight = symbol.height;\r\n }\r\n }\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\r\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\r\n }\r\n\r\n this.start.render();\r\n // for (i = 0, len = this.symbols.length; i < len; i++) {\r\n // symbol = this.symbols[i];\r\n // symbol.render();\r\n // }\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n symbol.renderLines();\r\n }\r\n\r\n maxX = this.maxXFromLine;\r\n\r\n var x;\r\n var y;\r\n\r\n for (i = 0, len = this.symbols.length; i < len; i++) {\r\n symbol = this.symbols[i];\r\n x = symbol.getX() + symbol.width;\r\n y = symbol.getY() + symbol.height;\r\n if (x > maxX) {\r\n maxX = x;\r\n }\r\n if (y > maxY) {\r\n maxY = y;\r\n }\r\n }\r\n\r\n for (i = 0, len = this.lines.length; i < len; i++) {\r\n line = this.lines[i].getBBox();\r\n x = line.x;\r\n y = line.y;\r\n var x2 = line.x2;\r\n var y2 = line.y2;\r\n if (x < minX) {\r\n minX = x;\r\n }\r\n if (y < minY) {\r\n minY = y;\r\n }\r\n if (x2 > maxX) {\r\n maxX = x2;\r\n }\r\n if (y2 > maxY) {\r\n maxY = y2;\r\n }\r\n }\r\n\r\n var scale = this.options['scale'];\r\n var lineWidth = this.options['line-width'];\r\n\r\n if (minX < 0) minX -= lineWidth;\r\n if (minY < 0) minY -= lineWidth;\r\n\r\n var width = maxX + lineWidth - minX;\r\n var height = maxY + lineWidth - minY;\r\n\r\n this.paper.setSize(width * scale, height * scale);\r\n this.paper.setViewBox(minX, minY, width, height, true);\r\n};\r\n\r\nFlowChart.prototype.clean = function() {\r\n if (this.paper) {\r\n var paperDom = this.paper.canvas;\r\n paperDom.parentNode.removeChild(paperDom);\r\n }\r\n};\r\n\r\nmodule.exports = FlowChart;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 6\n// module chunks = 0","// defaults\r\nmodule.exports = {\r\n 'x': 0,\r\n 'y': 0,\r\n 'line-width': 3,\r\n 'line-length': 50,\r\n 'text-margin': 10,\r\n 'font-size': 14,\r\n 'font-color': 'black',\r\n // 'font': 'normal',\r\n // 'font-family': 'calibri',\r\n // 'font-weight': 'normal',\r\n 'line-color': 'black',\r\n 'element-color': 'black',\r\n 'fill': 'white',\r\n 'yes-text': 'yes',\r\n 'no-text': 'no',\r\n 'arrow-end': 'block',\r\n 'class': 'flowchart',\r\n 'scale': 1,\r\n 'symbols': {\r\n 'start': {},\r\n 'end': {},\r\n 'condition': {},\r\n 'inputoutput': {},\r\n 'operation': {},\r\n 'subroutine': {}\r\n }//,\r\n // 'flowstate' : {\r\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\r\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\r\n // 'future' : { 'fill': '#FFFF99'},\r\n // 'invalid': {'fill': '#444444'}\r\n // }\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 7\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\r\nif (!Array.prototype.indexOf) {\r\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\r\n \"use strict\";\r\n if (this === null) {\r\n throw new TypeError();\r\n }\r\n var t = Object(this);\r\n var len = t.length >>> 0;\r\n if (len === 0) {\r\n return -1;\r\n }\r\n var n = 0;\r\n if (arguments.length > 0) {\r\n n = Number(arguments[1]);\r\n if (n != n) { // shortcut for verifying if it's NaN\r\n n = 0;\r\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\r\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n }\r\n }\r\n if (n >= len) {\r\n return -1;\r\n }\r\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\r\n for (; k < len; k++) {\r\n if (k in t && t[k] === searchElement) {\r\n return k;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\n\r\n// add lastIndexOf to non ECMA-262 standard compliant browsers\r\nif (!Array.prototype.lastIndexOf) {\r\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\r\n \"use strict\";\r\n if (this === null) {\r\n throw new TypeError();\r\n }\r\n var t = Object(this);\r\n var len = t.length >>> 0;\r\n if (len === 0) {\r\n return -1;\r\n }\r\n var n = len;\r\n if (arguments.length > 1) {\r\n n = Number(arguments[1]);\r\n if (n != n) {\r\n n = 0;\r\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\r\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n }\r\n }\r\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\r\n for (; k >= 0; k--) {\r\n if (k in t && t[k] === searchElement) {\r\n return k;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\n\r\nif (!String.prototype.trim) {\r\n String.prototype.trim = function() {\r\n return this.replace(/^\\s+|\\s+$/g, '');\r\n };\r\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 8\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction End(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n options = options || {};\r\n options.text = options.text || 'End';\r\n Symbol.call(this, chart, options, symbol);\r\n}\r\ninherits(End, Symbol);\r\n\r\nmodule.exports = End;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\nvar drawAPI = require('./flowchart.functions');\r\nvar drawPath = drawAPI.drawPath;\r\n\r\nfunction InputOutput(chart, options) {\r\n options = options || {};\r\n Symbol.call(this, chart, options);\r\n this.textMargin = this.getAttr('text-margin');\r\n\r\n this.text.attr({\r\n x: this.textMargin * 3\r\n });\r\n\r\n var width = this.text.getBBox().width + 4 * this.textMargin;\r\n var height = this.text.getBBox().height + 2 * this.textMargin;\r\n var startX = this.textMargin;\r\n var startY = height/2;\r\n\r\n var start = {x: startX, y: startY};\r\n var points = [\r\n {x: startX - this.textMargin, y: height},\r\n {x: startX - this.textMargin + width, y: height},\r\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\r\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\r\n {x: startX, y: startY}\r\n ];\r\n\r\n var symbol = drawPath(chart, start, points);\r\n\r\n symbol.attr({\r\n stroke: this.getAttr('element-color'),\r\n 'stroke-width': this.getAttr('line-width'),\r\n fill: this.getAttr('fill')\r\n });\r\n if (options.link) { symbol.attr('href', options.link); }\r\n if (options.target) { symbol.attr('target', options.target); }\r\n if (options.key) { symbol.node.id = options.key; }\r\n symbol.node.setAttribute('class', this.getAttr('class'));\r\n\r\n this.text.attr({\r\n y: symbol.getBBox().height/2\r\n });\r\n\r\n this.group.push(symbol);\r\n symbol.insertBefore(this.text);\r\n\r\n this.initialize();\r\n}\r\ninherits(InputOutput, Symbol);\r\n\r\nInputOutput.prototype.getLeft = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX() + this.textMargin;\r\n return {x: x, y: y};\r\n};\r\n\r\nInputOutput.prototype.getRight = function() {\r\n var y = this.getY() + this.group.getBBox().height/2;\r\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\r\n return {x: x, y: y};\r\n};\r\n\r\nmodule.exports = InputOutput;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction Operation(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0);\r\n options = options || {};\r\n Symbol.call(this, chart, options, symbol);\r\n}\r\ninherits(Operation, Symbol);\r\n\r\nmodule.exports = Operation;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction Start(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\r\n options = options || {};\r\n options.text = options.text || 'Start';\r\n Symbol.call(this, chart, options, symbol);\r\n}\r\ninherits(Start, Symbol);\r\n\r\nmodule.exports = Start;\r\n\r\n// Start.prototype.render = function() {\r\n// if (this.next) {\r\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\r\n\r\n// var bottomPoint = this.getBottom();\r\n// var topPoint = this.next.getTop();\r\n\r\n// if (!this.next.isPositioned) {\r\n// this.next.shiftY(this.getY() + this.height + lineLength);\r\n// this.next.setX(bottomPoint.x - this.next.width/2);\r\n// this.next.isPositioned = true;\r\n\r\n// this.next.render();\r\n// }\r\n// }\r\n// };\r\n\r\n// Start.prototype.renderLines = function() {\r\n// if (this.next) {\r\n// this.drawLineTo(this.next);\r\n// }\r\n// };\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\r\nvar inherits = require('./flowchart.helpers').inherits;\r\n\r\nfunction Subroutine(chart, options) {\r\n var symbol = chart.paper.rect(0, 0, 0, 0);\r\n options = options || {};\r\n Symbol.call(this, chart, options, symbol);\r\n\r\n symbol.attr({\r\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\r\n });\r\n\r\n this.text.attr({\r\n 'x': 2 * this.getAttr('text-margin')\r\n });\r\n\r\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\r\n innerWrap.attr({\r\n x: this.getAttr('text-margin'),\r\n stroke: this.getAttr('element-color'),\r\n 'stroke-width': this.getAttr('line-width'),\r\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\r\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\r\n fill: this.getAttr('fill')\r\n });\r\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\r\n\r\n var font = this.getAttr('font');\r\n var fontF = this.getAttr('font-family');\r\n var fontW = this.getAttr('font-weight');\r\n\r\n if (font) innerWrap.attr({ 'font': font });\r\n if (fontF) innerWrap.attr({ 'font-family': fontF });\r\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\r\n\r\n if (options.link) { innerWrap.attr('href', options.link); }\r\n if (options.target) { innerWrap.attr('target', options.target); }\r\n this.group.push(innerWrap);\r\n innerWrap.insertBefore(this.text);\r\n\r\n this.initialize();\r\n}\r\ninherits(Subroutine, Symbol);\r\n\r\nmodule.exports = Subroutine;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 13\n// module chunks = 0","if (typeof jQuery != 'undefined') {\r\n\tvar parse = require('./flowchart.parse');\r\n\t(function( $ ) {\r\n\t\t$.fn.flowChart = function( options ) {\r\n\t\t\treturn this.each(function() {\r\n\t\t\t\tvar $this = $(this);\r\n\t\t\t\tvar chart = parse($this.text());\r\n\t\t\t\t$this.html('');\r\n\t\t\t\tchart.drawSVG(this, options);\r\n\t\t\t});\r\n\t\t};\r\n\t})(jQuery); // eslint-disable-line\r\n}\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 14\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 15\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 3ef04776c38c65bfd6b9","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t //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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t\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/***/ }),\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 {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ }),\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \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 3ef04776c38c65bfd6b9","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n //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 }\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 }\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');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s); \n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)]; \n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\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//////////////////\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 {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 6\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 7\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 8\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 13\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 14\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 15\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/releasenotes.md b/releasenotes.md index f303c3d7..cf7efaa3 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,7 @@ +### v1.8.0 + +- Allow Conditional to support 'true' or 'false' along with 'yes' and 'no' [#128](https://github.com/adrai/flowchart.js/pull/#128) thanks to [bhedge](https://github.com/bhedge) + ### v1.7.0 - add parameter to disable vertical alignment of condition symbol [#115](https://github.com/adrai/flowchart.js/pull/#115) thanks to [bertrandmartel](https://github.com/bertrandmartel) diff --git a/site b/site index 4f9605e2..efa67c3a 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 4f9605e2af5cd0ea6dc352b26cd315be22d8d3a3 +Subproject commit efa67c3a5a1e50919be9e457789f494f234ff39c From bc5b31870e71acec500740892f1eb983c7d261fd Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Wed, 27 Dec 2017 19:04:41 +0100 Subject: [PATCH 040/117] update readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 206f15d0..36bcff3e 100644 --- a/README.md +++ b/README.md @@ -44,10 +44,10 @@ and then '' + 'st->op1(right)->cond\n' + 'cond(yes, right)->c2\n' + // conditions can also be redirected like cond(yes, bottom) or cond(yes, right) - 'cond(no)->sub1(left)->op1\n' + + 'cond(no)->sub1(left)->op1\n' + // the other symbols too... 'c2(true)->io->e\n' + 'c2(false)->op2->e' //allow for true and false in conditionals - );// the other symbols too... + ); diagram.drawSVG('diagram'); // you can also try to pass options: From 5f8d95b970d767e26f4348e87004ea52fcdd9b79 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Fri, 9 Feb 2018 09:25:03 +0100 Subject: [PATCH 041/117] fix example in readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 36bcff3e..a0c45087 100644 --- a/README.md +++ b/README.md @@ -38,10 +38,10 @@ and then 'op2=>operation: Stuff|current\n' + 'sub1=>subroutine: My Subroutine\n' + 'cond=>condition: Yes \n' + // use cond(align-next=no) to disable vertical align of symbols below - 'or No?\n:>http://www.google.com' + + 'or No?\n:>http://www.google.com\n' + 'c2=>condition: Good idea|rejected\n' + - 'io=>inputoutput|request: catch something...\n' + - '' + + 'io=>inputoutput: catch something...|request\n' + + '\n' + 'st->op1(right)->cond\n' + 'cond(yes, right)->c2\n' + // conditions can also be redirected like cond(yes, bottom) or cond(yes, right) 'cond(no)->sub1(left)->op1\n' + // the other symbols too... From d39bca4c9c81b7ff1add5b36ec7e9e086f5a80a1 Mon Sep 17 00:00:00 2001 From: Joseph Tocci Date: Sun, 18 Mar 2018 02:05:47 -0500 Subject: [PATCH 042/117] Add arrow-text attribute to symbols (#141) --- src/flowchart.symbol.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/flowchart.symbol.js b/src/flowchart.symbol.js index 06653421..670025c4 100644 --- a/src/flowchart.symbol.js +++ b/src/flowchart.symbol.js @@ -214,9 +214,9 @@ Symbol.prototype.render = function() { Symbol.prototype.renderLines = function() { if (this.next) { if (this.next_direction) { - this.drawLineTo(this.next, '', this.next_direction); + this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction); } else { - this.drawLineTo(this.next); + this.drawLineTo(this.next, this.getAttr('arrow-text') || ''); } } }; From 04650e0e7644642a85b49b447fd4b06b597a18ee Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Sun, 18 Mar 2018 08:08:35 +0100 Subject: [PATCH 043/117] bump --- package.json | 2 +- releasenotes.md | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 478242b1..42552a0a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.8.0", + "version": "1.9.0", "main": "./index", "private": false, "engines": { diff --git a/releasenotes.md b/releasenotes.md index cf7efaa3..2dfe4b86 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,7 @@ +### v1.9.0 + +- Add arrow-text attribute to symbols [#141](https://github.com/adrai/flowchart.js/pull/#141) thanks to [josephtocci](https://github.com/josephtocci) + ### v1.8.0 - Allow Conditional to support 'true' or 'false' along with 'yes' and 'no' [#128](https://github.com/adrai/flowchart.js/pull/#128) thanks to [bhedge](https://github.com/bhedge) From eb87716b136de31bbd27cbddc54831b13d0bbab7 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Sun, 18 Mar 2018 08:09:55 +0100 Subject: [PATCH 044/117] v1.9.0 --- release/flowchart.js | 6 +++--- release/flowchart.js.map | 2 +- release/flowchart.min.js | 6 +++--- release/flowchart.min.js.map | 2 +- site | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/release/flowchart.js b/release/flowchart.js index 07c3518d..10bee71f 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,5 +1,5 @@ -// flowchart.js, v1.8.0 -// Copyright (c)2017 Adriano Raiano (adrai). +// flowchart.js, v1.9.0 +// Copyright (c)2018 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js @@ -250,7 +250,7 @@ } } }, Symbol.prototype.renderLines = function() { - this.next && (this.next_direction ? this.drawLineTo(this.next, "", this.next_direction) : this.drawLineTo(this.next)); + this.next && (this.next_direction ? this.drawLineTo(this.next, this.getAttr("arrow-text") || "", this.next_direction) : this.drawLineTo(this.next, this.getAttr("arrow-text") || "")); }, Symbol.prototype.drawLineTo = function(symbol, text, origin) { this.connectedTo.indexOf(symbol) < 0 && this.connectedTo.push(symbol); var line, x = this.getCenter().x, y = this.getCenter().y, right = this.getRight(), bottom = this.getBottom(), left = this.getLeft(), symbolX = symbol.getCenter().x, symbolY = symbol.getCenter().y, symbolTop = symbol.getTop(), symbolRight = symbol.getRight(), symbolLeft = symbol.getLeft(), isOnSameColumn = x === symbolX, isOnSameLine = y === symbolY, isUnder = y < symbolY, isUpper = y > symbolY || this === symbol, isLeft = x > symbolX, isRight = x < symbolX, maxX = 0, lineLength = this.getAttr("line-length"), lineWith = this.getAttr("line-width"); diff --git a/release/flowchart.js.map b/release/flowchart.js.map index e325e1e3..10148171 100644 --- a/release/flowchart.js.map +++ b/release/flowchart.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 9641fd1c459d3101ba07","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t //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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t\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/***/ }),\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 {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ }),\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"," \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 9641fd1c459d3101ba07","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n //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 }\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 }\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');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s); \n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)]; \n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\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//////////////////\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 {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 6\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 7\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 8\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 13\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 14\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 15\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 5ac474245f7378c4d1bb","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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 left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t //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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t\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/***/ }),\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 {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ }),\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"," \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 5ac474245f7378c4d1bb","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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 left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n //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 }\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 }\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');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s); \n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)]; \n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\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//////////////////\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 {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 6\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 7\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 8\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 13\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 14\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 15\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index 68d4ec7f..5164465e 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,7 +1,7 @@ -// flowchart.js, v1.8.0 -// Copyright (c)2017 Adriano Raiano (adrai). +// flowchart.js, v1.9.0 +// Copyright (c)2018 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js -!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(8);var r=e(4);e(14);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),n=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),n&&this.text.attr({"font-weight":n}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var o=this.getAttr("maxWidth");if(o){for(var h=i.text.split(" "),a="",x=0,l=h.length;xo?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*g,height:this.text.getBBox().height+2*g}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),n=s.drawLine,o=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function i(){for(var r,s=!1,n=0,o=e.chart.symbols.length;ne.next.getCenter().y&&h<=e.next.width/2){s=!0;break}}s&&(e.next.setX(r.getX()+r.width+t),i())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,"",this.next_direction):this.drawLineTo(this.next))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),l=this.getLeft(),y=t.getCenter().x,g=t.getCenter().y,f=t.getTop(),p=t.getRight(),c=t.getLeft(),u=s===y,d=h===g,m=hg||this===t,v=s>y,w=sq?(J=["L",Q.x+2*B,V],T.splice(F+1,0,J),J=["C",Q.x+2*B,V,Q.x,V-4*B,Q.x-2*B,V],T.splice(F+2,0,J),r.attr("path",T)):(J=["L",Q.x-2*B,V],T.splice(F+1,0,J),J=["C",Q.x-2*B,V,Q.x,V-4*B,Q.x+2*B,V],T.splice(F+2,0,J),r.attr("path",T)):V>G?(J=["L",W,Q.y+2*B],T.splice(F+1,0,J),J=["C",W,Q.y+2*B,W+4*B,Q.y,W,Q.y-2*B],T.splice(F+2,0,J),r.attr("path",T)):(J=["L",W,Q.y-2*B],T.splice(F+1,0,J),J=["C",W,Q.y-2*B,W+4*B,Q.y,W,Q.y+2*B],T.splice(F+2,0,J),r.attr("path",T)),F+=2,M+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,n="M{0},{1}";for(r=2,s=2*e.length+2;rc.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"])),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),l&&f.attr({"font-family":l}),y&&f.attr({"font-weight":y})}return a}function s(t,i,e,r,s,n,o,h){var a,x,l,y,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-n)*(e-t)-(o-s)*(r-i),0===a?f:(x=i-n,l=t-s,y=(o-s)*x-(h-n)*l,g=(e-t)*x-(r-i)*l,x=y/a,l=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&x<1&&(f.onLine1=!0),l>0&&l<1&&(f.onLine2=!0),f)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function r(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?g.symbols[t.substring(0,i-1)]:g.symbols[t]}function y(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=j.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var g={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new n(y,t);break;case"end":g[t.key]=new o(y,t);break;case"operation":g[t.key]=new h(y,t);break;case"inputoutput":g[t.key]=new a(y,t);break;case"subroutine":g[t.key]=new x(y,t);break;case"condition":g[t.key]=new l(y,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var y=new s(t,i);this.diagram=y;var g={};!function t(i,s,n){var o=e(i);return r.start===i?y.startWith(o):s&&n&&!s.pathOk&&(s instanceof l?(n.yes===i&&s.yes(o),n.no===i&&s.no(o)):s.then(o)),o.pathOk?o:(o instanceof l?(i.yes&&t(i.yes,o,i),i.no&&t(i.no,o,i)):i.next&&t(i.next,o,i),o)}(this.start),y.render()},clean:function(){this.diagram.clean()}},f=[],p=0,c=1,u=t.length;c")<0&&v.indexOf("=>")<0&&v.indexOf("@>")<0?(f[m-1]+="\n"+v,f.splice(m,1),b--):m++}for(;f.length>0;){var w=f.splice(0,1)[0].trim();if(w.indexOf("=>")>=0){var k=w.split("=>"),_={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},B=k[0].match(/\((.*)\)/);if(B&&B.length>1)for(var A=B[1].split(","),O=0;O=0&&(M=_.symbolType.split(": "),_.symbolType=M.shift(),_.text=M.join(": ")),_.text&&_.text.indexOf(":>")>=0?(M=_.text.split(":>"),_.text=M.shift(),_.link=M.join(":>")):_.symbolType.indexOf(":>")>=0&&(M=_.symbolType.split(":>"),_.symbolType=M.shift(),_.link=M.join(":>")),_.symbolType.indexOf("\n")>=0&&(_.symbolType=_.symbolType.split("\n")[0]),_.link){var X=_.link.indexOf("[")+1,S=_.link.indexOf("]");X>=0&&S>=0&&(_.target=_.link.substring(X,S),_.link=_.link.substring(0,X-1))}if(_.text&&_.text.indexOf("|")>=0){var T=_.text.split("|");_.flowstate=T.pop().trim(),_.text=T.join("|")}g.symbols[_.key]=_}else if(w.indexOf("->")>=0)for(var Y=w.split("->"),O=0,C=Y.length;O=0){var F=P.split(",");P=F[0],R=F[1].trim()}if(g.start||(g.start=z),O+1")>=0)for(var N=w.split("@>"),O=0,C=N.length;Or.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){s=!0;break}}s&&(r.right_symbol.setX(e.getX()+e.width+t),i())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=n(i,o),this.symbols=[],this.lines=[],this.start=null}var s=e(15),n=e(1).defaults,o=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,n=0,o=0,h=0,a=0,x=0;for(s=0,n=this.symbols.length;se&&(e=t.width),t.height>r&&(r=t.height);for(s=0,n=this.symbols.length;so&&(o=l),y>h&&(h=y);for(s=0,n=this.lines.length;so&&(o=g),f>h&&(h=f)}var p=this.options.scale,c=this.options["line-width"];a<0&&(a-=c),x<0&&(x-=c);var u=o+c-a,d=h+c-x;this.paper.setSize(u*p,d*p),this.paper.setViewBox(a,x,u,d,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block",class:"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);s>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,n=this.textMargin,o=r/2,a={x:n,y:o},x=[{x:n-this.textMargin,y:r},{x:n-this.textMargin+e,y:r},{x:n-this.textMargin+e+2*this.textMargin,y:0},{x:n-this.textMargin+2*this.textMargin,y:0},{x:n,y:o}],l=h(t,a,x);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits,o=e(3),h=o.drawPath;n(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var n=this.getAttr("font"),o=this.getAttr("font-family"),h=this.getAttr("font-weight");n&&r.attr({font:n}),o&&r.attr({"font-family":o}),h&&r.attr({"font-weight":h}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); +!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(8);var r=e(4);e(14);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),n=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),n&&this.text.attr({"font-weight":n}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var o=this.getAttr("maxWidth");if(o){for(var h=i.text.split(" "),a="",x=0,l=h.length;xo?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*g,height:this.text.getBBox().height+2*g}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),n=s.drawLine,o=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function i(){for(var r,s=!1,n=0,o=e.chart.symbols.length;ne.next.getCenter().y&&h<=e.next.width/2){s=!0;break}}s&&(e.next.setX(r.getX()+r.width+t),i())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),l=this.getLeft(),y=t.getCenter().x,g=t.getCenter().y,f=t.getTop(),p=t.getRight(),c=t.getLeft(),u=s===y,d=h===g,m=hg||this===t,v=s>y,w=sq?(J=["L",Q.x+2*B,V],T.splice(F+1,0,J),J=["C",Q.x+2*B,V,Q.x,V-4*B,Q.x-2*B,V],T.splice(F+2,0,J),r.attr("path",T)):(J=["L",Q.x-2*B,V],T.splice(F+1,0,J),J=["C",Q.x-2*B,V,Q.x,V-4*B,Q.x+2*B,V],T.splice(F+2,0,J),r.attr("path",T)):V>G?(J=["L",W,Q.y+2*B],T.splice(F+1,0,J),J=["C",W,Q.y+2*B,W+4*B,Q.y,W,Q.y-2*B],T.splice(F+2,0,J),r.attr("path",T)):(J=["L",W,Q.y-2*B],T.splice(F+1,0,J),J=["C",W,Q.y-2*B,W+4*B,Q.y,W,Q.y+2*B],T.splice(F+2,0,J),r.attr("path",T)),F+=2,M+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,n="M{0},{1}";for(r=2,s=2*e.length+2;rc.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"])),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),l&&f.attr({"font-family":l}),y&&f.attr({"font-weight":y})}return a}function s(t,i,e,r,s,n,o,h){var a,x,l,y,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-n)*(e-t)-(o-s)*(r-i),0===a?f:(x=i-n,l=t-s,y=(o-s)*x-(h-n)*l,g=(e-t)*x-(r-i)*l,x=y/a,l=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&x<1&&(f.onLine1=!0),l>0&&l<1&&(f.onLine2=!0),f)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function r(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?g.symbols[t.substring(0,i-1)]:g.symbols[t]}function y(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=j.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var g={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new n(y,t);break;case"end":g[t.key]=new o(y,t);break;case"operation":g[t.key]=new h(y,t);break;case"inputoutput":g[t.key]=new a(y,t);break;case"subroutine":g[t.key]=new x(y,t);break;case"condition":g[t.key]=new l(y,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var y=new s(t,i);this.diagram=y;var g={};!function t(i,s,n){var o=e(i);return r.start===i?y.startWith(o):s&&n&&!s.pathOk&&(s instanceof l?(n.yes===i&&s.yes(o),n.no===i&&s.no(o)):s.then(o)),o.pathOk?o:(o instanceof l?(i.yes&&t(i.yes,o,i),i.no&&t(i.no,o,i)):i.next&&t(i.next,o,i),o)}(this.start),y.render()},clean:function(){this.diagram.clean()}},f=[],p=0,c=1,u=t.length;c")<0&&v.indexOf("=>")<0&&v.indexOf("@>")<0?(f[m-1]+="\n"+v,f.splice(m,1),b--):m++}for(;f.length>0;){var w=f.splice(0,1)[0].trim();if(w.indexOf("=>")>=0){var k=w.split("=>"),_={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},B=k[0].match(/\((.*)\)/);if(B&&B.length>1)for(var A=B[1].split(","),O=0;O=0&&(M=_.symbolType.split(": "),_.symbolType=M.shift(),_.text=M.join(": ")),_.text&&_.text.indexOf(":>")>=0?(M=_.text.split(":>"),_.text=M.shift(),_.link=M.join(":>")):_.symbolType.indexOf(":>")>=0&&(M=_.symbolType.split(":>"),_.symbolType=M.shift(),_.link=M.join(":>")),_.symbolType.indexOf("\n")>=0&&(_.symbolType=_.symbolType.split("\n")[0]),_.link){var X=_.link.indexOf("[")+1,S=_.link.indexOf("]");X>=0&&S>=0&&(_.target=_.link.substring(X,S),_.link=_.link.substring(0,X-1))}if(_.text&&_.text.indexOf("|")>=0){var T=_.text.split("|");_.flowstate=T.pop().trim(),_.text=T.join("|")}g.symbols[_.key]=_}else if(w.indexOf("->")>=0)for(var Y=w.split("->"),O=0,C=Y.length;O=0){var F=P.split(",");P=F[0],R=F[1].trim()}if(g.start||(g.start=z),O+1")>=0)for(var N=w.split("@>"),O=0,C=N.length;Or.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){s=!0;break}}s&&(r.right_symbol.setX(e.getX()+e.width+t),i())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=n(i,o),this.symbols=[],this.lines=[],this.start=null}var s=e(15),n=e(1).defaults,o=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,n=0,o=0,h=0,a=0,x=0;for(s=0,n=this.symbols.length;se&&(e=t.width),t.height>r&&(r=t.height);for(s=0,n=this.symbols.length;so&&(o=l),y>h&&(h=y);for(s=0,n=this.lines.length;so&&(o=g),f>h&&(h=f)}var p=this.options.scale,c=this.options["line-width"];a<0&&(a-=c),x<0&&(x-=c);var u=o+c-a,d=h+c-x;this.paper.setSize(u*p,d*p),this.paper.setViewBox(a,x,u,d,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block",class:"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);s>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,n=this.textMargin,o=r/2,a={x:n,y:o},x=[{x:n-this.textMargin,y:r},{x:n-this.textMargin+e,y:r},{x:n-this.textMargin+e+2*this.textMargin,y:0},{x:n-this.textMargin+2*this.textMargin,y:0},{x:n,y:o}],l=h(t,a,x);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits,o=e(3),h=o.drawPath;n(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var n=this.getAttr("font"),o=this.getAttr("font-family"),h=this.getAttr("font-weight");n&&r.attr({font:n}),o&&r.attr({"font-family":o}),h&&r.attr({"font-weight":h}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); //# sourceMappingURL=flowchart.min.js.map \ No newline at end of file diff --git a/release/flowchart.min.js.map b/release/flowchart.min.js.map index f87fb858..cca04163 100644 --- a/release/flowchart.min.js.map +++ b/release/flowchart.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 3ef04776c38c65bfd6b9","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t //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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t\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/***/ }),\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 {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ }),\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \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 3ef04776c38c65bfd6b9","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, '', this.next_direction);\n } else {\n this.drawLineTo(this.next);\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n //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 }\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 }\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');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s); \n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)]; \n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\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//////////////////\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 {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 6\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 7\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 8\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 13\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 14\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 15\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap cb17add9262a090e0860","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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 left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t //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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t\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/***/ }),\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 {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ }),\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \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 cb17add9262a090e0860","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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 left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n //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 }\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 }\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');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s); \n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)]; \n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\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//////////////////\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 {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 6\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 7\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 8\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 13\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 14\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 15\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/site b/site index efa67c3a..bf6a8e81 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit efa67c3a5a1e50919be9e457789f494f234ff39c +Subproject commit bf6a8e81c20ad5687f901cc0b63b0afb5c9a3a9d From 4e0272fb307080e8f8bb938d262eb92af0a7b9cb Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Mon, 19 Mar 2018 15:14:53 +0100 Subject: [PATCH 045/117] #142 introduce top direction --- package.json | 2 +- release/flowchart.js | 79 +++++++++++++++++-------------- release/flowchart.js.map | 2 +- release/flowchart.min.js | 2 +- release/flowchart.min.js.map | 2 +- src/flowchart.functions.js | 3 ++ src/flowchart.symbol.condition.js | 3 ++ src/flowchart.symbol.js | 14 +++++- 8 files changed, 66 insertions(+), 41 deletions(-) diff --git a/package.json b/package.json index 42552a0a..1e921bd8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.9.0", + "version": "1.10.0", "main": "./index", "private": false, "engines": { diff --git a/release/flowchart.js b/release/flowchart.js index 10bee71f..618c9f85 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -149,7 +149,7 @@ }), options.link && this.text.attr("href", options.link), options.target && this.text.attr("target", options.target); var maxWidth = this.getAttr("maxWidth"); if (maxWidth) { - for (var words = options.text.split(" "), tempText = "", i = 0, ii = words.length; i < ii; i++) { + for (var words = options.text.split(" "), tempText = "", i = 0, ii = words.length; ii > i; i++) { var word = words[i]; this.text.attr("text", tempText + " " + word), tempText += this.text.getBBox().width > maxWidth ? "\n" + word : " " + word; } @@ -231,7 +231,7 @@ this.next.setY(rightPoint.y - this.next.height / 2), this.next.shiftX(this.group.getBBox().x + this.width + lineLength); var self = this; !function shift() { - for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) { + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; len > i; i++) { symb = self.chart.symbols[i]; var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x); if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width / 2) { @@ -253,7 +253,7 @@ this.next && (this.next_direction ? this.drawLineTo(this.next, this.getAttr("arrow-text") || "", this.next_direction) : this.drawLineTo(this.next, this.getAttr("arrow-text") || "")); }, Symbol.prototype.drawLineTo = function(symbol, text, origin) { this.connectedTo.indexOf(symbol) < 0 && this.connectedTo.push(symbol); - var line, x = this.getCenter().x, y = this.getCenter().y, right = this.getRight(), bottom = this.getBottom(), left = this.getLeft(), symbolX = symbol.getCenter().x, symbolY = symbol.getCenter().y, symbolTop = symbol.getTop(), symbolRight = symbol.getRight(), symbolLeft = symbol.getLeft(), isOnSameColumn = x === symbolX, isOnSameLine = y === symbolY, isUnder = y < symbolY, isUpper = y > symbolY || this === symbol, isLeft = x > symbolX, isRight = x < symbolX, maxX = 0, lineLength = this.getAttr("line-length"), lineWith = this.getAttr("line-width"); + var line, x = this.getCenter().x, y = this.getCenter().y, right = this.getRight(), bottom = this.getBottom(), top = this.getTop(), left = this.getLeft(), symbolX = symbol.getCenter().x, symbolY = symbol.getCenter().y, symbolTop = symbol.getTop(), symbolRight = symbol.getRight(), symbolLeft = symbol.getLeft(), isOnSameColumn = x === symbolX, isOnSameLine = y === symbolY, isUnder = symbolY > y, isUpper = y > symbolY || this === symbol, isLeft = x > symbolX, isRight = symbolX > x, maxX = 0, lineLength = this.getAttr("line-length"), lineWith = this.getAttr("line-width"); if (origin && "bottom" !== origin || !isOnSameColumn || !isUnder) if (origin && "right" !== origin || !isOnSameLine || !isRight) if (origin && "left" !== origin || !isOnSameLine || !isLeft) if (origin && "right" !== origin || !isOnSameColumn || !isUpper) if (origin && "right" !== origin || !isOnSameColumn || !isUnder) if (origin && "bottom" !== origin || !isLeft) if (origin && "bottom" !== origin || !isRight) if (origin && "right" === origin && isLeft) line = drawLine(this.chart, right, [ { x: right.x + lineLength / 2, y: right.y @@ -302,7 +302,7 @@ x: symbolTop.x, y: symbolTop.y } ], text), this.leftStart = !0, symbol.topEnd = !0, maxX = left.x; - } else "left" === origin && (line = drawLine(this.chart, left, [ { + } else "left" === origin ? (line = drawLine(this.chart, left, [ { x: symbolTop.x + (left.x - symbolTop.x) / 2, y: left.y }, { @@ -314,7 +314,16 @@ }, { x: symbolTop.x, y: symbolTop.y - } ], text), this.leftStart = !0, symbol.topEnd = !0, maxX = left.x); else line = drawLine(this.chart, bottom, [ { + } ], text), this.leftStart = !0, symbol.topEnd = !0, maxX = left.x) : "top" === origin && (line = drawLine(this.chart, top, [ { + x: top.x, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y + } ], text), this.topStart = !0, symbol.topEnd = !0, maxX = top.x); else line = drawLine(this.chart, bottom, [ { x: bottom.x, y: bottom.y + lineLength / 2 }, { @@ -383,10 +392,10 @@ this.bottomStart = !0, symbol.topEnd = !0, maxX = bottom.x; if (//update line style this.lineStyle[symbol.key] && line && line.attr(this.lineStyle[symbol.key]), line) { - for (var l = 0, llen = this.chart.lines.length; l < llen; l++) for (var len, otherLine = this.chart.lines[l], ePath = otherLine.attr("path"), lPath = line.attr("path"), iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) { + for (var l = 0, llen = this.chart.lines.length; llen > l; l++) for (var len, otherLine = this.chart.lines[l], ePath = otherLine.attr("path"), lPath = line.attr("path"), iP = 0, lenP = ePath.length - 1; lenP > iP; iP++) { var newPath = []; newPath.push([ "M", ePath[iP][1], ePath[iP][2] ]), newPath.push([ "L", ePath[iP + 1][1], ePath[iP + 1][2] ]); - for (var line1_from_x = newPath[0][1], line1_from_y = newPath[0][2], line1_to_x = newPath[1][1], line1_to_y = newPath[1][2], lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) { + for (var line1_from_x = newPath[0][1], line1_from_y = newPath[0][2], line1_to_x = newPath[1][1], line1_to_y = newPath[1][2], lP = 0, lenlP = lPath.length - 1; lenlP > lP; lP++) { var newLinePath = []; newLinePath.push([ "M", lPath[lP][1], lPath[lP][2] ]), newLinePath.push([ "L", lPath[lP + 1][1], lPath[lP + 1][2] ]); var line2_from_x = newLinePath[0][1], line2_from_y = newLinePath[0][2], line2_to_x = newLinePath[1][1], line2_to_y = newLinePath[1][2], 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); @@ -416,9 +425,9 @@ function(module, exports) { function drawPath(chart, location, points) { var i, len, path = "M{0},{1}"; - for (i = 2, len = 2 * points.length + 2; i < len; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; + for (i = 2, len = 2 * points.length + 2; len > i; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; var pathValues = [ location.x, location.y ]; - for (i = 0, len = points.length; i < len; i++) pathValues.push(points[i].x), pathValues.push(points[i].y); + for (i = 0, len = points.length; len > i; i++) pathValues.push(points[i].x), pathValues.push(points[i].y); var symbol = chart.paper.path(path, pathValues); symbol.attr("stroke", chart.options["element-color"]), symbol.attr("stroke-width", chart.options["line-width"]); var font = chart.options.font, fontF = chart.options["font-family"], fontW = chart.options["font-weight"]; @@ -434,9 +443,9 @@ var i, len; "[object Array]" !== Object.prototype.toString.call(to) && (to = [ to ]); var path = "M{0},{1}"; - for (i = 2, len = 2 * to.length + 2; i < len; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; + for (i = 2, len = 2 * to.length + 2; len > i; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; var pathValues = [ from.x, from.y ]; - for (i = 0, len = to.length; i < len; i++) pathValues.push(to[i].x), pathValues.push(to[i].y); + for (i = 0, len = to.length; len > i; i++) pathValues.push(to[i].x), pathValues.push(to[i].y); var line = chart.paper.path(path, pathValues); line.attr({ stroke: chart.options["line-color"], @@ -458,8 +467,8 @@ y = from.y > firstTo.y ? from.y - (from.y - firstTo.y) / 2 : firstTo.y - (firstTo.y - from.y) / 2, isHorizontal ? (x -= textPath.getBBox().width / 2, y -= chart.options["text-margin"]) : (x += chart.options["text-margin"], y -= textPath.getBBox().height / 2)) : (x = from.x, y = from.y, isHorizontal ? (x += chart.options["text-margin"] / 2, - y -= chart.options["text-margin"]) : (x += chart.options["text-margin"] / 2, y += chart.options["text-margin"])), - textPath.attr({ + y -= chart.options["text-margin"]) : (x += chart.options["text-margin"] / 2, y += chart.options["text-margin"], + from.y > firstTo.y && (y -= 2 * chart.options["text-margin"]))), textPath.attr({ "text-anchor": "start", "font-size": chart.options["font-size"], fill: chart.options["font-color"], @@ -495,8 +504,8 @@ 0 === denominator ? result : (a = line1StartY - line2StartY, b = line1StartX - line2StartX, numerator1 = (line2EndX - line2StartX) * a - (line2EndY - line2StartY) * b, numerator2 = (line1EndX - line1StartX) * a - (line1EndY - line1StartY) * b, a = numerator1 / denominator, b = numerator2 / denominator, result.x = line1StartX + a * (line1EndX - line1StartX), - result.y = line1StartY + a * (line1EndY - line1StartY), a > 0 && a < 1 && (result.onLine1 = !0), - b > 0 && b < 1 && (result.onLine2 = !0), result); + result.y = line1StartY + a * (line1EndY - line1StartY), a > 0 && 1 > a && (result.onLine1 = !0), + b > 0 && 1 > b && (result.onLine2 = !0), result); } module.exports = { drawPath: drawPath, @@ -581,12 +590,12 @@ clean: function() { this.diagram.clean(); } - }, lines = [], prevBreak = 0, i0 = 1, i0len = input.length; i0 < i0len; i0++) if ("\n" === input[i0] && "\\" !== input[i0 - 1]) { + }, lines = [], prevBreak = 0, i0 = 1, i0len = input.length; i0len > i0; i0++) if ("\n" === input[i0] && "\\" !== input[i0 - 1]) { var line0 = input.substring(prevBreak, i0); prevBreak = i0 + 1, lines.push(line0.replace(/\\\n/g, "\n")); } prevBreak < input.length && lines.push(input.substr(prevBreak)); - for (var l = 1, len = lines.length; l < len; ) { + for (var l = 1, len = lines.length; len > l; ) { var currentLine = lines[l]; currentLine.indexOf("->") < 0 && currentLine.indexOf("=>") < 0 && currentLine.indexOf("@>") < 0 ? (lines[l - 1] += "\n" + currentLine, lines.splice(l, 1), len--) : l++; @@ -628,21 +637,21 @@ } /* end of flowstate support */ chart.symbols[symbol.key] = symbol; - } else if (line.indexOf("->") >= 0) for (var flowSymbols = line.split("->"), i = 0, lenS = flowSymbols.length; i < lenS; i++) { + } else if (line.indexOf("->") >= 0) for (var flowSymbols = line.split("->"), i = 0, lenS = flowSymbols.length; lenS > i; i++) { var flowSymb = flowSymbols[i], symbVal = getSymbValue(flowSymb); - "true" !== symbVal && "false" !== symbVal || (// map true or false to yes or no respectively - flowSymb = flowSymb.replace("true", "yes"), flowSymb = flowSymb.replace("false", "no")); + ("true" === symbVal || "false" === symbVal) && (flowSymb = flowSymb.replace("true", "yes"), + flowSymb = flowSymb.replace("false", "no")); var realSymb = getSymbol(flowSymb), next = getNextPath(flowSymb), direction = null; if (next.indexOf(",") >= 0) { var condOpt = next.split(","); next = condOpt[0], direction = condOpt[1].trim(); } - if (chart.start || (chart.start = realSymb), i + 1 < lenS) { + if (chart.start || (chart.start = realSymb), lenS > i + 1) { var nextSymb = flowSymbols[i + 1]; realSymb[next] = getSymbol(nextSymb), realSymb["direction_" + next] = direction, direction = null; } - } else if (line.indexOf("@>") >= 0) for (var lineStyleSymbols = line.split("@>"), i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) if (i + 1 != lenS) { + } else if (line.indexOf("@>") >= 0) for (var lineStyleSymbols = line.split("@>"), i = 0, lenS = lineStyleSymbols.length; lenS > i; i++) if (i + 1 != lenS) { var curSymb = getSymbol(lineStyleSymbols[i]), nextSymb = getSymbol(lineStyleSymbols[i + 1]); curSymb.lineStyle[nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1])); } @@ -661,7 +670,8 @@ options = options || {}, Symbol.call(this, chart, options), this.textMargin = this.getAttr("text-margin"), this.yes_direction = "bottom", this.no_direction = "right", this.params = options.params, options.yes && options.direction_yes && options.no && !options.direction_no ? "right" === options.direction_yes ? (this.no_direction = "bottom", - this.yes_direction = "right") : (this.no_direction = "right", this.yes_direction = "bottom") : options.yes && !options.direction_yes && options.no && options.direction_no ? "right" === options.direction_no ? (this.yes_direction = "bottom", + this.yes_direction = "right") : "top" === options.direction_yes ? (this.no_direction = "right", + this.yes_direction = "top") : (this.no_direction = "right", this.yes_direction = "bottom") : options.yes && !options.direction_yes && options.no && options.direction_no ? "right" === options.direction_no ? (this.yes_direction = "bottom", this.no_direction = "right") : (this.yes_direction = "right", this.no_direction = "bottom") : (this.yes_direction = "bottom", this.no_direction = "right"), this.yes_direction = this.yes_direction || "bottom", this.no_direction = this.no_direction || "right", this.text.attr({ @@ -721,7 +731,7 @@ this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2), this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength); var self = this; !function shift() { - for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) if (symb = self.chart.symbols[i], + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; len > i; i++) if (symb = self.chart.symbols[i], !self.params["align-next"] || "no" !== self.params["align-next"]) { var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) { @@ -765,27 +775,27 @@ return this.start = symbol, this.handle(symbol); }, FlowChart.prototype.render = function() { var symbol, line, maxWidth = 0, maxHeight = 0, i = 0, len = 0, maxX = 0, maxY = 0, minX = 0, minY = 0; - for (i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], symbol.width > maxWidth && (maxWidth = symbol.width), + for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.width > maxWidth && (maxWidth = symbol.width), symbol.height > maxHeight && (maxHeight = symbol.height); - for (i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], symbol.shiftX(this.options.x + (maxWidth - symbol.width) / 2 + this.options["line-width"]), + for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.shiftX(this.options.x + (maxWidth - symbol.width) / 2 + this.options["line-width"]), symbol.shiftY(this.options.y + (maxHeight - symbol.height) / 2 + this.options["line-width"]); // for (i = 0, len = this.symbols.length; i < len; i++) { // symbol = this.symbols[i]; // symbol.render(); // } - for (this.start.render(), i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], + for (this.start.render(), i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.renderLines(); maxX = this.maxXFromLine; var x, y; - for (i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], x = symbol.getX() + symbol.width, + for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], x = symbol.getX() + symbol.width, y = symbol.getY() + symbol.height, x > maxX && (maxX = x), y > maxY && (maxY = y); - for (i = 0, len = this.lines.length; i < len; i++) { + for (i = 0, len = this.lines.length; len > i; i++) { line = this.lines[i].getBBox(), x = line.x, y = line.y; var x2 = line.x2, y2 = line.y2; - x < minX && (minX = x), y < minY && (minY = y), x2 > maxX && (maxX = x2), y2 > maxY && (maxY = y2); + minX > x && (minX = x), minY > y && (minY = y), x2 > maxX && (maxX = x2), y2 > maxY && (maxY = y2); } var scale = this.options.scale, lineWidth = this.options["line-width"]; - minX < 0 && (minX -= lineWidth), minY < 0 && (minY -= lineWidth); + 0 > minX && (minX -= lineWidth), 0 > minY && (minY -= lineWidth); var width = maxX + lineWidth - minX, height = maxY + lineWidth - minY; this.paper.setSize(width * scale, height * scale), this.paper.setViewBox(minX, minY, width, height, !0); }, FlowChart.prototype.clean = function() { @@ -818,7 +828,7 @@ "yes-text": "yes", "no-text": "no", "arrow-end": "block", - class: "flowchart", + "class": "flowchart", scale: 1, symbols: { start: {}, @@ -842,10 +852,9 @@ var t = Object(this), len = t.length >>> 0; if (0 === len) return -1; var n = 0; - if (arguments.length > 0 && (n = Number(arguments[1]), n != n ? // shortcut for verifying if it's NaN - n = 0 : 0 !== n && n != 1 / 0 && n != -(1 / 0) && (n = (n > 0 || -1) * Math.floor(Math.abs(n)))), + if (arguments.length > 0 && (n = Number(arguments[1]), n != n ? n = 0 : 0 !== n && n != 1 / 0 && n != -(1 / 0) && (n = (n > 0 || -1) * Math.floor(Math.abs(n)))), n >= len) return -1; - for (var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); k < len; k++) if (k in t && t[k] === searchElement) return k; + for (var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); len > k; k++) if (k in t && t[k] === searchElement) return k; return -1; }), // add lastIndexOf to non ECMA-262 standard compliant browsers Array.prototype.lastIndexOf || (Array.prototype.lastIndexOf = function(searchElement) { diff --git a/release/flowchart.js.map b/release/flowchart.js.map index 10148171..1401e1e5 100644 --- a/release/flowchart.js.map +++ b/release/flowchart.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 5ac474245f7378c4d1bb","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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 left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t //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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t\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/***/ }),\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 {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ }),\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"," \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 5ac474245f7378c4d1bb","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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 left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n //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 }\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 }\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');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s); \n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)]; \n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\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//////////////////\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 {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 6\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 7\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 8\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 13\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 14\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 15\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 06cdd547fba3c3321e5f","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","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","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","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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) {\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 }\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 */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t\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/***/ },\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 {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 06cdd547fba3c3321e5f\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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) {\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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n 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\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s); \n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)]; \n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n 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 {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index 5164465e..4f94c34f 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -3,5 +3,5 @@ // Distributed under MIT license // http://adrai.github.io/flowchart.js -!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(8);var r=e(4);e(14);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),n=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),n&&this.text.attr({"font-weight":n}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var o=this.getAttr("maxWidth");if(o){for(var h=i.text.split(" "),a="",x=0,l=h.length;xo?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*g,height:this.text.getBBox().height+2*g}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),n=s.drawLine,o=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function i(){for(var r,s=!1,n=0,o=e.chart.symbols.length;ne.next.getCenter().y&&h<=e.next.width/2){s=!0;break}}s&&(e.next.setX(r.getX()+r.width+t),i())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),l=this.getLeft(),y=t.getCenter().x,g=t.getCenter().y,f=t.getTop(),p=t.getRight(),c=t.getLeft(),u=s===y,d=h===g,m=hg||this===t,v=s>y,w=sq?(J=["L",Q.x+2*B,V],T.splice(F+1,0,J),J=["C",Q.x+2*B,V,Q.x,V-4*B,Q.x-2*B,V],T.splice(F+2,0,J),r.attr("path",T)):(J=["L",Q.x-2*B,V],T.splice(F+1,0,J),J=["C",Q.x-2*B,V,Q.x,V-4*B,Q.x+2*B,V],T.splice(F+2,0,J),r.attr("path",T)):V>G?(J=["L",W,Q.y+2*B],T.splice(F+1,0,J),J=["C",W,Q.y+2*B,W+4*B,Q.y,W,Q.y-2*B],T.splice(F+2,0,J),r.attr("path",T)):(J=["L",W,Q.y-2*B],T.splice(F+1,0,J),J=["C",W,Q.y-2*B,W+4*B,Q.y,W,Q.y+2*B],T.splice(F+2,0,J),r.attr("path",T)),F+=2,M+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,n="M{0},{1}";for(r=2,s=2*e.length+2;rc.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"])),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),l&&f.attr({"font-family":l}),y&&f.attr({"font-weight":y})}return a}function s(t,i,e,r,s,n,o,h){var a,x,l,y,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-n)*(e-t)-(o-s)*(r-i),0===a?f:(x=i-n,l=t-s,y=(o-s)*x-(h-n)*l,g=(e-t)*x-(r-i)*l,x=y/a,l=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&x<1&&(f.onLine1=!0),l>0&&l<1&&(f.onLine2=!0),f)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function r(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?g.symbols[t.substring(0,i-1)]:g.symbols[t]}function y(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=j.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var g={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new n(y,t);break;case"end":g[t.key]=new o(y,t);break;case"operation":g[t.key]=new h(y,t);break;case"inputoutput":g[t.key]=new a(y,t);break;case"subroutine":g[t.key]=new x(y,t);break;case"condition":g[t.key]=new l(y,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var y=new s(t,i);this.diagram=y;var g={};!function t(i,s,n){var o=e(i);return r.start===i?y.startWith(o):s&&n&&!s.pathOk&&(s instanceof l?(n.yes===i&&s.yes(o),n.no===i&&s.no(o)):s.then(o)),o.pathOk?o:(o instanceof l?(i.yes&&t(i.yes,o,i),i.no&&t(i.no,o,i)):i.next&&t(i.next,o,i),o)}(this.start),y.render()},clean:function(){this.diagram.clean()}},f=[],p=0,c=1,u=t.length;c")<0&&v.indexOf("=>")<0&&v.indexOf("@>")<0?(f[m-1]+="\n"+v,f.splice(m,1),b--):m++}for(;f.length>0;){var w=f.splice(0,1)[0].trim();if(w.indexOf("=>")>=0){var k=w.split("=>"),_={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},B=k[0].match(/\((.*)\)/);if(B&&B.length>1)for(var A=B[1].split(","),O=0;O=0&&(M=_.symbolType.split(": "),_.symbolType=M.shift(),_.text=M.join(": ")),_.text&&_.text.indexOf(":>")>=0?(M=_.text.split(":>"),_.text=M.shift(),_.link=M.join(":>")):_.symbolType.indexOf(":>")>=0&&(M=_.symbolType.split(":>"),_.symbolType=M.shift(),_.link=M.join(":>")),_.symbolType.indexOf("\n")>=0&&(_.symbolType=_.symbolType.split("\n")[0]),_.link){var X=_.link.indexOf("[")+1,S=_.link.indexOf("]");X>=0&&S>=0&&(_.target=_.link.substring(X,S),_.link=_.link.substring(0,X-1))}if(_.text&&_.text.indexOf("|")>=0){var T=_.text.split("|");_.flowstate=T.pop().trim(),_.text=T.join("|")}g.symbols[_.key]=_}else if(w.indexOf("->")>=0)for(var Y=w.split("->"),O=0,C=Y.length;O=0){var F=P.split(",");P=F[0],R=F[1].trim()}if(g.start||(g.start=z),O+1")>=0)for(var N=w.split("@>"),O=0,C=N.length;Or.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){s=!0;break}}s&&(r.right_symbol.setX(e.getX()+e.width+t),i())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=n(i,o),this.symbols=[],this.lines=[],this.start=null}var s=e(15),n=e(1).defaults,o=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,n=0,o=0,h=0,a=0,x=0;for(s=0,n=this.symbols.length;se&&(e=t.width),t.height>r&&(r=t.height);for(s=0,n=this.symbols.length;so&&(o=l),y>h&&(h=y);for(s=0,n=this.lines.length;so&&(o=g),f>h&&(h=f)}var p=this.options.scale,c=this.options["line-width"];a<0&&(a-=c),x<0&&(x-=c);var u=o+c-a,d=h+c-x;this.paper.setSize(u*p,d*p),this.paper.setViewBox(a,x,u,d,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block",class:"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);s>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,n=this.textMargin,o=r/2,a={x:n,y:o},x=[{x:n-this.textMargin,y:r},{x:n-this.textMargin+e,y:r},{x:n-this.textMargin+e+2*this.textMargin,y:0},{x:n-this.textMargin+2*this.textMargin,y:0},{x:n,y:o}],l=h(t,a,x);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits,o=e(3),h=o.drawPath;n(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var n=this.getAttr("font"),o=this.getAttr("font-family"),h=this.getAttr("font-weight");n&&r.attr({font:n}),o&&r.attr({"font-family":o}),h&&r.attr({"font-weight":h}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); +!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(8);var r=e(4);e(14);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),n=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),n&&this.text.attr({"font-weight":n}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var o=this.getAttr("maxWidth");if(o){for(var h=i.text.split(" "),a="",x=0,l=h.length;l>x;x++){var y=h[x];this.text.attr("text",a+" "+y),a+=this.text.getBBox().width>o?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*g,height:this.text.getBBox().height+2*g}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),n=s.drawLine,o=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function s(){for(var i,r=!1,n=0,o=e.chart.symbols.length;o>n;n++){i=e.chart.symbols[n];var h=Math.abs(i.getCenter().x-e.next.getCenter().x);if(i.getCenter().y>e.next.getCenter().y&&h<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),s())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),l=this.getTop(),y=this.getLeft(),g=t.getCenter().x,f=t.getCenter().y,p=t.getTop(),c=t.getRight(),u=t.getLeft(),d=s===g,m=h===f,b=f>h,v=h>f||this===t,w=s>g,k=g>s,_=0,B=this.getAttr("line-length"),A=this.getAttr("line-width");if(e&&"bottom"!==e||!d||!b)if(e&&"right"!==e||!m||!k)if(e&&"left"!==e||!m||!w)if(e&&"right"!==e||!d||!v)if(e&&"right"!==e||!d||!b)if(e&&"bottom"!==e||!w)if(e&&"bottom"!==e||!k)if(e&&"right"===e&&w)r=n(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:p.y-B/2},{x:p.x,y:p.y-B/2},{x:p.x,y:p.y}],i),this.rightStart=!0,t.topEnd=!0,_=a.x+B/2;else if(e&&"right"===e&&k)r=n(this.chart,a,[{x:p.x,y:a.y},{x:p.x,y:p.y}],i),this.rightStart=!0,t.topEnd=!0,_=a.x+B/2;else if(e&&"bottom"===e&&d&&v)r=n(this.chart,x,[{x:x.x,y:x.y+B/2},{x:a.x+B/2,y:x.y+B/2},{x:a.x+B/2,y:p.y-B/2},{x:p.x,y:p.y-B/2},{x:p.x,y:p.y}],i),this.bottomStart=!0,t.topEnd=!0,_=x.x+B/2;else if("left"===e&&d&&v){var O=y.x-B/2;u.xL;L++)for(var X,S=this.chart.lines[L],T=S.attr("path"),Y=r.attr("path"),C=0,E=T.length-1;E>C;C++){var j=[];j.push(["M",T[C][1],T[C][2]]),j.push(["L",T[C+1][1],T[C+1][2]]);for(var z=j[0][1],P=j[0][2],R=j[1][1],F=j[1][2],I=0,N=Y.length-1;N>I;I++){var W=[];W.push(["M",Y[I][1],Y[I][2]]),W.push(["L",Y[I+1][1],Y[I+1][2]]);var V=W[0][1],q=W[0][2],G=W[1][1],Q=W[1][2],J=o(z,P,R,F,V,q,G,Q);if(J.onLine1&&J.onLine2){var $;q===Q?V>G?($=["L",J.x+2*A,q],Y.splice(I+1,0,$),$=["C",J.x+2*A,q,J.x,q-4*A,J.x-2*A,q],Y.splice(I+2,0,$),r.attr("path",Y)):($=["L",J.x-2*A,q],Y.splice(I+1,0,$),$=["C",J.x-2*A,q,J.x,q-4*A,J.x+2*A,q],Y.splice(I+2,0,$),r.attr("path",Y)):q>Q?($=["L",V,J.y+2*A],Y.splice(I+1,0,$),$=["C",V,J.y+2*A,V+4*A,J.y,V,J.y-2*A],Y.splice(I+2,0,$),r.attr("path",Y)):($=["L",V,J.y-2*A],Y.splice(I+1,0,$),$=["C",V,J.y-2*A,V+4*A,J.y,V,J.y+2*A],Y.splice(I+2,0,$),r.attr("path",Y)),I+=2,X+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&_>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=_)},t.exports=r},function(t,i){function e(t,i,e){var r,s,n="M{0},{1}";for(r=2,s=2*e.length+2;s>r;r+=2)n+=" L{"+r+"},{"+(r+1)+"}";var o=[i.x,i.y];for(r=0,s=e.length;s>r;r++)o.push(e[r].x),o.push(e[r].y);var h=t.paper.path(n,o);h.attr("stroke",t.options["element-color"]),h.attr("stroke-width",t.options["line-width"]);var a=t.options.font,x=t.options["font-family"],l=t.options["font-weight"];return a&&h.attr({font:a}),x&&h.attr({"font-family":x}),l&&h.attr({"font-weight":l}),h}function r(t,i,e,r){var s,n;"[object Array]"!==Object.prototype.toString.call(e)&&(e=[e]);var o="M{0},{1}";for(s=2,n=2*e.length+2;n>s;s+=2)o+=" L{"+s+"},{"+(s+1)+"}";var h=[i.x,i.y];for(s=0,n=e.length;n>s;s++)h.push(e[s].x),h.push(e[s].y);var a=t.paper.path(o,h);a.attr({stroke:t.options["line-color"],"stroke-width":t.options["line-width"],"arrow-end":t.options["arrow-end"]});var x=t.options.font,l=t.options["font-family"],y=t.options["font-weight"];if(x&&a.attr({font:x}),l&&a.attr({"font-family":l}),y&&a.attr({"font-weight":y}),r){var g=!1,f=t.paper.text(0,0,r),p=!1,c=e[0];i.y===c.y&&(p=!0);var u=0,d=0;g?(u=i.x>c.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"],i.y>c.y&&(d-=2*t.options["text-margin"]))),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),l&&f.attr({"font-family":l}),y&&f.attr({"font-weight":y})}return a}function s(t,i,e,r,s,n,o,h){var a,x,l,y,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-n)*(e-t)-(o-s)*(r-i),0===a?f:(x=i-n,l=t-s,y=(o-s)*x-(h-n)*l,g=(e-t)*x-(r-i)*l,x=y/a,l=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&1>x&&(f.onLine1=!0),l>0&&1>l&&(f.onLine2=!0),f)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function r(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?g.symbols[t.substring(0,i-1)]:g.symbols[t]}function y(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=E.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var g={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new n(y,t);break;case"end":g[t.key]=new o(y,t);break;case"operation":g[t.key]=new h(y,t);break;case"inputoutput":g[t.key]=new a(y,t);break;case"subroutine":g[t.key]=new x(y,t);break;case"condition":g[t.key]=new l(y,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var y=new s(t,i);this.diagram=y;var g={};!function f(t,i,s){var n=e(t);return r.start===t?y.startWith(n):i&&s&&!i.pathOk&&(i instanceof l?(s.yes===t&&i.yes(n),s.no===t&&i.no(n)):i.then(n)),n.pathOk?n:(n instanceof l?(t.yes&&f(t.yes,n,t),t.no&&f(t.no,n,t)):t.next&&f(t.next,n,t),n)}(this.start),y.render()},clean:function(){this.diagram.clean()}},f=[],p=0,c=1,u=t.length;u>c;c++)if("\n"===t[c]&&"\\"!==t[c-1]){var d=t.substring(p,c);p=c+1,f.push(d.replace(/\\\n/g,"\n"))}pm;){var v=f[m];v.indexOf("->")<0&&v.indexOf("=>")<0&&v.indexOf("@>")<0?(f[m-1]+="\n"+v,f.splice(m,1),b--):m++}for(;f.length>0;){var w=f.splice(0,1)[0].trim();if(w.indexOf("=>")>=0){var k=w.split("=>"),_={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},B=k[0].match(/\((.*)\)/);if(B&&B.length>1)for(var A=B[1].split(","),O=0;O=0&&(M=_.symbolType.split(": "),_.symbolType=M.shift(),_.text=M.join(": ")),_.text&&_.text.indexOf(":>")>=0?(M=_.text.split(":>"),_.text=M.shift(),_.link=M.join(":>")):_.symbolType.indexOf(":>")>=0&&(M=_.symbolType.split(":>"),_.symbolType=M.shift(),_.link=M.join(":>")),_.symbolType.indexOf("\n")>=0&&(_.symbolType=_.symbolType.split("\n")[0]),_.link){var X=_.link.indexOf("[")+1,S=_.link.indexOf("]");X>=0&&S>=0&&(_.target=_.link.substring(X,S),_.link=_.link.substring(0,X-1))}if(_.text&&_.text.indexOf("|")>=0){var T=_.text.split("|");_.flowstate=T.pop().trim(),_.text=T.join("|")}g.symbols[_.key]=_}else if(w.indexOf("->")>=0)for(var Y=w.split("->"),O=0,C=Y.length;C>O;O++){var E=Y[O],j=e(E);("true"===j||"false"===j)&&(E=E.replace("true","yes"),E=E.replace("false","no"));var z=r(E),P=y(E),R=null;if(P.indexOf(",")>=0){var F=P.split(",");P=F[0],R=F[1].trim()}if(g.start||(g.start=z),C>O+1){var I=Y[O+1];z[P]=r(I),z["direction_"+P]=R,R=null}}else if(w.indexOf("@>")>=0)for(var N=w.split("@>"),O=0,C=N.length;C>O;O++)if(O+1!=C){var W=r(N[O]),I=r(N[O+1]);W.lineStyle[I.key]=JSON.parse(i(N[O+1]))}}return g}var s=e(6),n=e(12),o=e(9),h=e(11),a=e(10),x=e(13),l=e(5);t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.yes_direction="bottom",this.no_direction="right",this.params=i.params,i.yes&&i.direction_yes&&i.no&&!i.direction_no?"right"===i.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):"top"===i.direction_yes?(this.no_direction="right",this.yes_direction="top"):(this.no_direction="right",this.yes_direction="bottom"):i.yes&&!i.direction_yes&&i.no&&i.direction_no?"right"===i.direction_no?(this.yes_direction="bottom",this.no_direction="right"):(this.yes_direction="right",this.no_direction="bottom"):(this.yes_direction="bottom",this.no_direction="right"),this.yes_direction=this.yes_direction||"bottom",this.no_direction=this.no_direction||"right",this.text.attr({x:2*this.textMargin});var e=this.text.getBBox().width+3*this.textMargin;e+=e/2;var r=this.text.getBBox().height+2*this.textMargin;r+=r/2,r=Math.max(.5*e,r);var n=e/4,o=r/4;this.text.attr({x:n+this.textMargin/2});var a={x:n,y:o},x=[{x:n-e/4,y:o+r/4},{x:n-e/4+e/2,y:o+r/4+r/2},{x:n-e/4+e,y:o+r/4},{x:n-e/4+e/2,y:o+r/4-r/2},{x:n-e/4,y:o+r/4}],l=h(t,a,x);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits,o=e(3),h=o.drawPath;n(r,s),r.prototype.render=function(){this.yes_direction&&(this[this.yes_direction+"_symbol"]=this.yes_symbol),this.no_direction&&(this[this.no_direction+"_symbol"]=this.no_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.right_symbol){var e=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(e.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var r=this;!function s(){for(var i,e=!1,n=0,o=r.chart.symbols.length;o>n;n++)if(i=r.chart.symbols[n],!r.params["align-next"]||"no"!==r.params["align-next"]){var h=Math.abs(i.getCenter().x-r.right_symbol.getCenter().x);if(i.getCenter().y>r.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),s())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=n(i,o),this.symbols=[],this.lines=[],this.start=null}var s=e(15),n=e(1).defaults,o=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,n=0,o=0,h=0,a=0,x=0;for(s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],t.width>e&&(e=t.width),t.height>r&&(r=t.height);for(s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],t.shiftX(this.options.x+(e-t.width)/2+this.options["line-width"]),t.shiftY(this.options.y+(r-t.height)/2+this.options["line-width"]);for(this.start.render(),s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],t.renderLines();o=this.maxXFromLine;var l,y;for(s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],l=t.getX()+t.width,y=t.getY()+t.height,l>o&&(o=l),y>h&&(h=y);for(s=0,n=this.lines.length;n>s;s++){i=this.lines[s].getBBox(),l=i.x,y=i.y;var g=i.x2,f=i.y2;a>l&&(a=l),x>y&&(x=y),g>o&&(o=g),f>h&&(h=f)}var p=this.options.scale,c=this.options["line-width"];0>a&&(a-=c),0>x&&(x-=c);var u=o+c-a,d=h+c-x;this.paper.setSize(u*p,d*p),this.paper.setViewBox(a,x,u,d,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);e>s;s++)if(s in i&&i[s]===t)return s;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,n=this.textMargin,o=r/2,a={x:n,y:o},x=[{x:n-this.textMargin,y:r},{x:n-this.textMargin+e,y:r},{x:n-this.textMargin+e+2*this.textMargin,y:0},{x:n-this.textMargin+2*this.textMargin,y:0},{x:n,y:o}],l=h(t,a,x);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits,o=e(3),h=o.drawPath;n(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var n=this.getAttr("font"),o=this.getAttr("font-family"),h=this.getAttr("font-weight");n&&r.attr({font:n}),o&&r.attr({"font-family":o}),h&&r.attr({"font-weight":h}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); //# sourceMappingURL=flowchart.min.js.map \ No newline at end of file diff --git a/release/flowchart.min.js.map b/release/flowchart.min.js.map index cca04163..e8b5d517 100644 --- a/release/flowchart.min.js.map +++ b/release/flowchart.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap cb17add9262a090e0860","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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 left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t }\n\t\n\t //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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t\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/***/ }),\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 {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ }),\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \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 cb17add9262a090e0860","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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 left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n }\n\n //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 }\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 }\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');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s); \n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)]; \n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\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//////////////////\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 {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 6\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 7\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 8\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 13\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 14\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 15\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 451ee7af3112ff0efb83","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","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","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","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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) {\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 }\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 */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t\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/***/ },\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 {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 451ee7af3112ff0efb83\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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) {\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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n 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\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s); \n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)]; \n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n 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 {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/src/flowchart.functions.js b/src/flowchart.functions.js index 23c62a86..85057b9f 100644 --- a/src/flowchart.functions.js +++ b/src/flowchart.functions.js @@ -102,6 +102,9 @@ function drawLine(chart, from, to, text) { } else { x += chart.options['text-margin']/2; y += chart.options['text-margin']; + if (from.y > firstTo.y) { + y -= chart.options['text-margin']*2; + } } } diff --git a/src/flowchart.symbol.condition.js b/src/flowchart.symbol.condition.js index 72d3941c..b970a5bf 100644 --- a/src/flowchart.symbol.condition.js +++ b/src/flowchart.symbol.condition.js @@ -14,6 +14,9 @@ function Condition(chart, options) { if (options.direction_yes === 'right') { this.no_direction = 'bottom'; this.yes_direction = 'right'; + } else if (options.direction_yes === 'top') { + this.no_direction = 'right'; + this.yes_direction = 'top'; } else { this.no_direction = 'right'; this.yes_direction = 'bottom'; diff --git a/src/flowchart.symbol.js b/src/flowchart.symbol.js index 670025c4..822f99dc 100644 --- a/src/flowchart.symbol.js +++ b/src/flowchart.symbol.js @@ -230,6 +230,7 @@ Symbol.prototype.drawLineTo = function(symbol, text, origin) { y = this.getCenter().y, right = this.getRight(), bottom = this.getBottom(), + top = this.getTop(), left = this.getLeft(); var symbolX = symbol.getCenter().x, @@ -360,14 +361,23 @@ Symbol.prototype.drawLineTo = function(symbol, text, origin) { maxX = left.x; } else if ((origin === 'left')) { line = drawLine(this.chart, left, [ - {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y}, - {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2}, + {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y}, + {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2}, {x: symbolTop.x, y: symbolTop.y - lineLength/2}, {x: symbolTop.x, y: symbolTop.y} ], text); this.leftStart = true; symbol.topEnd = true; maxX = left.x; + } else if ((origin === 'top')) { + line = drawLine(this.chart, top, [ + {x: top.x, y: symbolTop.y - lineLength/2}, + {x: symbolTop.x, y: symbolTop.y - lineLength/2}, + {x: symbolTop.x, y: symbolTop.y} + ], text); + this.topStart = true; + symbol.topEnd = true; + maxX = top.x; } //update line style From 3a9b4ce5c8cb2bead0a55304aca22d2587d0d71b Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Mon, 19 Mar 2018 15:15:34 +0100 Subject: [PATCH 046/117] bump --- release/flowchart.js | 2 +- release/flowchart.min.js | 2 +- site | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/release/flowchart.js b/release/flowchart.js index 618c9f85..bb3a3437 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,4 +1,4 @@ -// flowchart.js, v1.9.0 +// flowchart.js, v1.10.0 // Copyright (c)2018 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js diff --git a/release/flowchart.min.js b/release/flowchart.min.js index 4f94c34f..e9884e51 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,4 +1,4 @@ -// flowchart.js, v1.9.0 +// flowchart.js, v1.10.0 // Copyright (c)2018 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js diff --git a/site b/site index bf6a8e81..19ca6c57 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit bf6a8e81c20ad5687f901cc0b63b0afb5c9a3a9d +Subproject commit 19ca6c57d687c9a3e8f6dd7e5fd25fe12f0bd653 From 97e31fce504e6e19dc7e28820726e1b4e9ef8b89 Mon Sep 17 00:00:00 2001 From: Sudhakar Date: Wed, 11 Apr 2018 14:09:34 +0530 Subject: [PATCH 047/117] Flowchart parallel (#145) * Flowchart parallel type added --- src/flowchart.chart.js | 45 ++++++--- src/flowchart.defaults.js | 17 ++-- src/flowchart.parse.js | 39 ++++++-- src/flowchart.symbol.parallel.js | 153 +++++++++++++++++++++++++++++++ 4 files changed, 227 insertions(+), 27 deletions(-) create mode 100644 src/flowchart.symbol.parallel.js diff --git a/src/flowchart.chart.js b/src/flowchart.chart.js index e8d4d90c..cf3f2278 100644 --- a/src/flowchart.chart.js +++ b/src/flowchart.chart.js @@ -2,6 +2,7 @@ var Raphael = require('raphael'); var defaults = require('./flowchart.helpers').defaults; var defaultOptions = require('./flowchart.defaults'); var Condition = require('./flowchart.symbol.condition'); +var Parallel = require('./flowchart.symbol.parallel'); function FlowChart(container, options) { options = options || {}; @@ -32,7 +33,29 @@ FlowChart.prototype.handle = function(symbol) { }; symbol.no = function(nextSymbol) { symbol.no_symbol = nextSymbol; - if(symbol.yes_symbol) { + if (symbol.yes_symbol) { + symbol.pathOk = true; + } + return flowChart.handle(nextSymbol); + }; + } else if (symbol instanceof(Parallel)) { + symbol.path1 = function(nextSymbol) { + symbol.path1_symbol = nextSymbol; + if (symbol.path2_symbol) { + symbol.pathOk = true; + } + return flowChart.handle(nextSymbol); + }; + symbol.path2 = function(nextSymbol) { + symbol.path2_symbol = nextSymbol; + if (symbol.path3_symbol) { + symbol.pathOk = true; + } + return flowChart.handle(nextSymbol); + }; + symbol.path3 = function(nextSymbol) { + symbol.path3_symbol = nextSymbol; + if (symbol.path1_symbol) { symbol.pathOk = true; } return flowChart.handle(nextSymbol); @@ -55,15 +78,15 @@ FlowChart.prototype.startWith = function(symbol) { FlowChart.prototype.render = function() { var maxWidth = 0, - maxHeight = 0, - i = 0, - len = 0, - maxX = 0, - maxY = 0, - minX = 0, - minY = 0, - symbol, - line; + maxHeight = 0, + i = 0, + len = 0, + maxX = 0, + maxY = 0, + minX = 0, + minY = 0, + symbol, + line; for (i = 0, len = this.symbols.length; i < len; i++) { symbol = this.symbols[i]; @@ -149,4 +172,4 @@ FlowChart.prototype.clean = function() { } }; -module.exports = FlowChart; +module.exports = FlowChart; \ No newline at end of file diff --git a/src/flowchart.defaults.js b/src/flowchart.defaults.js index 5303530e..6c6bac61 100644 --- a/src/flowchart.defaults.js +++ b/src/flowchart.defaults.js @@ -19,17 +19,18 @@ module.exports = { 'class': 'flowchart', 'scale': 1, 'symbols': { - 'start': {}, - 'end': {}, - 'condition': {}, - 'inputoutput': {}, - 'operation': {}, - 'subroutine': {} - }//, + 'start': {}, + 'end': {}, + 'condition': {}, + 'inputoutput': {}, + 'operation': {}, + 'subroutine': {}, + 'parallel': {} + } //, // 'flowstate' : { // 'past' : { 'fill': '#CCCCCC', 'font-size': 12}, // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'}, // 'future' : { 'fill': '#FFFF99'}, // 'invalid': {'fill': '#444444'} // } -}; +}; \ No newline at end of file diff --git a/src/flowchart.parse.js b/src/flowchart.parse.js index 62870ee8..5aa4a1c9 100644 --- a/src/flowchart.parse.js +++ b/src/flowchart.parse.js @@ -5,6 +5,7 @@ var Operation = require('./flowchart.symbol.operation'); var InputOutput = require('./flowchart.symbol.inputoutput'); var Subroutine = require('./flowchart.symbol.subroutine'); var Condition = require('./flowchart.symbol.condition'); +var Parallel = require('./flowchart.symbol.parallel'); function parse(input) { input = input || ''; @@ -40,7 +41,7 @@ function parse(input) { dispSymbols[s.key] = new Operation(diagram, s); break; case 'inputoutput': - dispSymbols[s.key] = new InputOutput(diagram, s); + dispSymbols[s.key] = new InputOutput(diagram, s); break; case 'subroutine': dispSymbols[s.key] = new Subroutine(diagram, s); @@ -48,6 +49,9 @@ function parse(input) { case 'condition': dispSymbols[s.key] = new Condition(diagram, s); break; + case 'parallel': + dispSymbols[s.key] = new Parallel(diagram, s); + break; default: return new Error('Wrong symbol type!'); } @@ -68,6 +72,16 @@ function parse(input) { if (prev.no === s) { prevDisp.no(dispSymb); } + } else if (prevDisp instanceof(Parallel)) { + if (prev.path1 === s) { + prevDisp.path1(dispSymb); + } + if (prev.path2 === s) { + prevDisp.path2(dispSymb); + } + if (prev.path3 === s) { + prevDisp.path3(dispSymb); + } } else { prevDisp.then(dispSymb); } @@ -84,6 +98,16 @@ function parse(input) { if (s.no) { constructChart(s.no, dispSymb, s); } + } else if (dispSymb instanceof(Parallel)) { + if (s.path1) { + constructChart(s.path1, dispSymb, s); + } + if (s.path2) { + constructChart(s.path2, dispSymb, s); + } + if (s.path3) { + constructChart(s.path3, dispSymb, s); + } } else if (s.next) { constructChart(s.next, dispSymb, s); } @@ -108,7 +132,7 @@ function parse(input) { } } - if(prevBreak < input.length) { + if (prevBreak < input.length) { lines.push(input.substr(prevBreak)); } @@ -146,7 +170,7 @@ function parse(input) { var startIndex = s.indexOf('(') + 1; var endIndex = s.indexOf(')'); if (startIndex >= 0 && endIndex >= 0) { - return chart.symbols[s.substring(0, startIndex - 1)]; + return chart.symbols[s.substring(0, startIndex - 1)]; } return chart.symbols[s]; } @@ -189,7 +213,7 @@ function parse(input) { var entries = params[1].split(','); for(var i = 0; i < entries.length; i++) { var entry = entries[0].split('='); - if (entry.length == 2){ + if (entry.length == 2) { symbol.params[entry[0]] = entry[1]; } } @@ -279,12 +303,11 @@ function parse(input) { // line style var lineStyleSymbols = line.split('@>'); for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) { - - if ((i+1) != lenS){ + if ((i + 1) != lenS) { var curSymb = getSymbol(lineStyleSymbols[i]); var nextSymb = getSymbol(lineStyleSymbols[i+1]); - curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i+1])); + curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1])); } } } @@ -293,4 +316,4 @@ function parse(input) { return chart; } -module.exports = parse; +module.exports = parse; \ No newline at end of file diff --git a/src/flowchart.symbol.parallel.js b/src/flowchart.symbol.parallel.js new file mode 100644 index 00000000..54c1e5f1 --- /dev/null +++ b/src/flowchart.symbol.parallel.js @@ -0,0 +1,153 @@ +var Symbol = require('./flowchart.symbol'); +var inherits = require('./flowchart.helpers').inherits; +var drawAPI = require('./flowchart.functions'); +var drawPath = drawAPI.drawPath; + +function Parallel(chart, options) { + var symbol = chart.paper.rect(0, 0, 0, 0); + options = options || {}; + Symbol.call(this, chart, options, symbol); + this.textMargin = this.getAttr('text-margin'); + this.path1_direction = 'bottom'; + this.path2_direction = 'right'; + this.path3_direction = 'top'; + this.params = options.params; + if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) { + if (options.direction_path1 === 'right') { + this.path2_direction = 'bottom'; + this.path1_direction = 'right'; + this.path3_direction = 'top'; + } else if (options.direction_path1 === 'top') { + this.path2_direction = 'right'; + this.path1_direction = 'top'; + this.path3_direction = 'top'; + } else { + this.path2_direction = 'right'; + this.path1_direction = 'bottom'; + this.path3_direction = 'top'; + } + } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) { + if (options.direction_path2 === 'right') { + this.path1_direction = 'bottom'; + this.path2_direction = 'right'; + this.path3_direction = 'top'; + } else { + this.path1_direction = 'right'; + this.path2_direction = 'bottom'; + this.path3_direction = 'top'; + } + } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) { + if (options.direction_path2 === 'right') { + this.path1_direction = 'bottom'; + this.path2_direction = 'top'; + this.path3_direction = 'right'; + } else { + this.path1_direction = 'right'; + this.path2_direction = 'bottom'; + this.path3_direction = 'top'; + } + } else { + this.path1_direction = 'bottom'; + this.path2_direction = 'right'; + this.path3_direction = 'top'; + } + + this.path1_direction = this.path1_direction || 'bottom'; + this.path2_direction = this.path2_direction || 'right'; + this.path3_direction = this.path3_direction || 'top'; + + this.initialize(); +} +inherits(Parallel, Symbol); + +Parallel.prototype.render = function() { + + if (this.path1_direction) { + this[this.path1_direction + '_symbol'] = this.path1_symbol; + } + + if (this.path2_direction) { + this[this.path2_direction + '_symbol'] = this.path2_symbol; + } + + if (this.path3_direction) { + this[this.path3_direction + '_symbol'] = this.path3_symbol; + } + + var lineLength = this.getAttr('line-length'); + + if (this.bottom_symbol) { + var bottomPoint = this.getBottom(); + + if (!this.bottom_symbol.isPositioned) { + this.bottom_symbol.shiftY(this.getY() + this.height + lineLength); + this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2); + this.bottom_symbol.isPositioned = true; + + this.bottom_symbol.render(); + } + } + + if (this.top_symbol) { + var topPoint = this.getTop(); + + if (!this.top_symbol.isPositioned) { + this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength); + this.top_symbol.setX(topPoint.x + this.top_symbol.width); + this.top_symbol.isPositioned = true; + + this.top_symbol.render(); + } + } + + if (this.right_symbol) { + var rightPoint = this.getRight(); + + if (!this.right_symbol.isPositioned) { + + this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2); + this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength); + var self = this; + (function shift() { + var hasSymbolUnder = false; + var symb; + for (var i = 0, len = self.chart.symbols.length; i < len; i++) { + symb = self.chart.symbols[i]; + + if (!self.params['align-next'] || self.params['align-next'] !== 'no') { + var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); + if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) { + hasSymbolUnder = true; + break; + } + } + } + + if (hasSymbolUnder) { + self.right_symbol.setX(symb.getX() + symb.width + lineLength); + shift(); + } + })(); + + this.right_symbol.isPositioned = true; + + this.right_symbol.render(); + } + } +}; + +Parallel.prototype.renderLines = function() { + if (this.path1_symbol) { + this.drawLineTo(this.path1_symbol, '', this.path1_direction); + } + + if (this.path2_symbol) { + this.drawLineTo(this.path2_symbol, '', this.path2_direction); + } + + if (this.path3_symbol) { + this.drawLineTo(this.path3_symbol, '', this.path3_direction); + } +}; + +module.exports = Parallel; \ No newline at end of file From 3478719e934ec289797e2cf1c80556fc16c3c4b3 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Wed, 11 Apr 2018 12:29:22 +0200 Subject: [PATCH 048/117] parallel component --- example/index.html | 10 ++- index.html | 8 +- package.json | 2 +- release/flowchart.js | 125 ++++++++++++++++++++++++++----- release/flowchart.js.map | 2 +- release/flowchart.min.js | 4 +- release/flowchart.min.js.map | 2 +- releasenotes.md | 4 + site | 2 +- src/flowchart.defaults.js | 14 ++-- src/flowchart.symbol.parallel.js | 32 ++++++-- 11 files changed, 162 insertions(+), 43 deletions(-) diff --git a/example/index.html b/example/index.html index 3dc10154..0a75706c 100644 --- a/example/index.html +++ b/example/index.html @@ -84,12 +84,16 @@ or No?|approved:>http://www.google.com c2=>condition: Good idea|rejected io=>inputoutput: catch something...|request +para=>parallel: parallel tasks st->op1(right)->cond cond(yes, right)->c2 -cond(no)->sub1(left)->op1 -c2(yes)->io->e -c2(no)->op2->e +cond(no)->para +c2(true)->io->e +c2(false)->e + +para(path1, bottom)->sub1(left)->op1 +para(path2, right)->op2->e st@>op1({"stroke":"Red"})@>cond({"stroke":"Red","stroke-width":6,"arrow-end":"classic-wide-long"})@>c2({"stroke":"Red"})@>op2({"stroke":"Red"})@>e({"stroke":"Red"})
diff --git a/index.html b/index.html index 7f1854cf..9e51ffbf 100644 --- a/index.html +++ b/index.html @@ -17,12 +17,16 @@ or No?|approved:>http://www.google.com c2=>condition: Good idea|rejected io=>inputoutput: catch something...|request +para=>parallel: parallel tasks st->op1(right)->cond cond(yes, right)->c2 -cond(no)->sub1(left)->op1 +cond(no)->para c2(true)->io->e -c2(false)->op2->e +c2(false)->e + +para(path1, bottom)->sub1(left)->op1 +para(path2, right)->op2->e diff --git a/package.json b/package.json index 1e921bd8..8488742b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.10.0", + "version": "1.11.0", "main": "./index", "private": false, "engines": { diff --git a/release/flowchart.js b/release/flowchart.js index bb3a3437..c9a441c2 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,4 +1,4 @@ -// flowchart.js, v1.10.0 +// flowchart.js, v1.11.0 // Copyright (c)2018 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js @@ -8,7 +8,7 @@ var a = factory("object" == typeof exports ? require("Raphael") : root.Raphael); for (var i in a) ("object" == typeof exports ? exports : root)[i] = a[i]; } -}(this, function(__WEBPACK_EXTERNAL_MODULE_15__) { +}(this, function(__WEBPACK_EXTERNAL_MODULE_16__) { /******/ return function(modules) { /******/ @@ -79,9 +79,9 @@ \******************/ /***/ function(module, exports, __webpack_require__) { - __webpack_require__(/*! ./src/flowchart.shim */ 8); + __webpack_require__(/*! ./src/flowchart.shim */ 9); var parse = __webpack_require__(/*! ./src/flowchart.parse */ 4); - __webpack_require__(/*! ./src/jquery-plugin */ 14); + __webpack_require__(/*! ./src/jquery-plugin */ 15); var FlowChart = { parse: parse }; @@ -569,6 +569,10 @@ dispSymbols[s.key] = new Condition(diagram, s); break; + case "parallel": + dispSymbols[s.key] = new Parallel(diagram, s); + break; + default: return new Error("Wrong symbol type!"); } @@ -582,8 +586,11 @@ !function constructChart(s, prevDisp, prev) { var dispSymb = getDisplaySymbol(s); return self.start === s ? diagram.startWith(dispSymb) : prevDisp && prev && !prevDisp.pathOk && (prevDisp instanceof Condition ? (prev.yes === s && prevDisp.yes(dispSymb), - prev.no === s && prevDisp.no(dispSymb)) : prevDisp.then(dispSymb)), dispSymb.pathOk ? dispSymb : (dispSymb instanceof Condition ? (s.yes && constructChart(s.yes, dispSymb, s), - s.no && constructChart(s.no, dispSymb, s)) : s.next && constructChart(s.next, dispSymb, s), + prev.no === s && prevDisp.no(dispSymb)) : prevDisp instanceof Parallel ? (prev.path1 === s && prevDisp.path1(dispSymb), + prev.path2 === s && prevDisp.path2(dispSymb), prev.path3 === s && prevDisp.path3(dispSymb)) : prevDisp.then(dispSymb)), + dispSymb.pathOk ? dispSymb : (dispSymb instanceof Condition ? (s.yes && constructChart(s.yes, dispSymb, s), + s.no && constructChart(s.no, dispSymb, s)) : dispSymb instanceof Parallel ? (s.path1 && constructChart(s.path1, dispSymb, s), + s.path2 && constructChart(s.path2, dispSymb, s), s.path3 && constructChart(s.path3, dispSymb, s)) : s.next && constructChart(s.next, dispSymb, s), dispSymb); }(this.start), diagram.render(); }, @@ -658,7 +665,7 @@ } return chart; } - var FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6), Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12), End = __webpack_require__(/*! ./flowchart.symbol.end */ 9), Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11), InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10), Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13), Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5); + var FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7), Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13), End = __webpack_require__(/*! ./flowchart.symbol.end */ 10), Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12), InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11), Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14), Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5), Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6); module.exports = parse; }, /* 5 */ /*!*******************************************!*\ @@ -749,6 +756,76 @@ this.no_symbol && this.drawLineTo(this.no_symbol, this.getAttr("no-text"), this.no_direction); }, module.exports = Condition; }, /* 6 */ + /*!******************************************!*\ + !*** ./src/flowchart.symbol.parallel.js ***! + \******************************************/ + /***/ + function(module, exports, __webpack_require__) { + function Parallel(chart, options) { + var symbol = chart.paper.rect(0, 0, 0, 0); + options = options || {}, Symbol.call(this, chart, options, symbol), this.textMargin = this.getAttr("text-margin"), + this.path1_direction = "bottom", this.path2_direction = "right", this.path3_direction = "top", + this.params = options.params, "path1" === options.direction_next && !options[options.direction_next] && options.next && (options[options.direction_next] = options.next), + "path2" === options.direction_next && !options[options.direction_next] && options.next && (options[options.direction_next] = options.next), + "path3" === options.direction_next && !options[options.direction_next] && options.next && (options[options.direction_next] = options.next), + options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3 ? "right" === options.direction_path1 ? (this.path2_direction = "bottom", + this.path1_direction = "right", this.path3_direction = "top") : "top" === options.direction_path1 ? (this.path2_direction = "right", + this.path1_direction = "top", this.path3_direction = "bottom") : "left" === options.direction_path1 ? (this.path2_direction = "right", + this.path1_direction = "left", this.path3_direction = "bottom") : (this.path2_direction = "right", + this.path1_direction = "bottom", this.path3_direction = "top") : options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3 ? "right" === options.direction_path2 ? (this.path1_direction = "bottom", + this.path2_direction = "right", this.path3_direction = "top") : "left" === options.direction_path2 ? (this.path1_direction = "bottom", + this.path2_direction = "left", this.path3_direction = "right") : (this.path1_direction = "right", + this.path2_direction = "bottom", this.path3_direction = "top") : options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3 ? "right" === options.direction_path2 ? (this.path1_direction = "bottom", + this.path2_direction = "top", this.path3_direction = "right") : "left" === options.direction_path2 ? (this.path1_direction = "bottom", + this.path2_direction = "right", this.path3_direction = "left") : (this.path1_direction = "right", + this.path2_direction = "bottom", this.path3_direction = "top") : (this.path1_direction = options.direction_path1, + this.path2_direction = options.direction_path2, this.path3_direction = options.direction_path3), + this.path1_direction = this.path1_direction || "bottom", this.path2_direction = this.path2_direction || "right", + this.path3_direction = this.path3_direction || "top", this.initialize(); + } + var Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2), inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits; + inherits(Parallel, Symbol), Parallel.prototype.render = function() { + this.path1_direction && (this[this.path1_direction + "_symbol"] = this.path1_symbol), + this.path2_direction && (this[this.path2_direction + "_symbol"] = this.path2_symbol), + this.path3_direction && (this[this.path3_direction + "_symbol"] = this.path3_symbol); + var lineLength = this.getAttr("line-length"); + if (this.bottom_symbol) { + var bottomPoint = this.getBottom(); + this.bottom_symbol.isPositioned || (this.bottom_symbol.shiftY(this.getY() + this.height + lineLength), + this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2), this.bottom_symbol.isPositioned = !0, + this.bottom_symbol.render()); + } + if (this.top_symbol) { + var topPoint = this.getTop(); + this.top_symbol.isPositioned || (this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength), + this.top_symbol.setX(topPoint.x + this.top_symbol.width), this.top_symbol.isPositioned = !0, + this.top_symbol.render()); + } + if (this.right_symbol) { + var rightPoint = this.getRight(); + if (!this.right_symbol.isPositioned) { + this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2), this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength); + var self = this; + !function shift() { + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; len > i; i++) if (symb = self.chart.symbols[i], + !self.params["align-next"] || "no" !== self.params["align-next"]) { + var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); + if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) { + hasSymbolUnder = !0; + break; + } + } + hasSymbolUnder && (self.right_symbol.setX(symb.getX() + symb.width + lineLength), + shift()); + }(), this.right_symbol.isPositioned = !0, this.right_symbol.render(); + } + } + }, Parallel.prototype.renderLines = function() { + this.path1_symbol && this.drawLineTo(this.path1_symbol, "", this.path1_direction), + this.path2_symbol && this.drawLineTo(this.path2_symbol, "", this.path2_direction), + this.path3_symbol && this.drawLineTo(this.path3_symbol, "", this.path3_direction); + }, module.exports = Parallel; + }, /* 7 */ /*!********************************!*\ !*** ./src/flowchart.chart.js ***! \********************************/ @@ -758,7 +835,7 @@ options = options || {}, this.paper = new Raphael(container), this.options = defaults(options, defaultOptions), this.symbols = [], this.lines = [], this.start = null; } - var Raphael = __webpack_require__(/*! raphael */ 15), defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults, defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7), Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5); + var Raphael = __webpack_require__(/*! raphael */ 16), defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults, defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8), Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5), Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6); FlowChart.prototype.handle = function(symbol) { this.symbols.indexOf(symbol) <= -1 && this.symbols.push(symbol); var flowChart = this; @@ -768,6 +845,15 @@ }, symbol.no = function(nextSymbol) { return symbol.no_symbol = nextSymbol, symbol.yes_symbol && (symbol.pathOk = !0), flowChart.handle(nextSymbol); + }) : symbol instanceof Parallel ? (symbol.path1 = function(nextSymbol) { + return symbol.path1_symbol = nextSymbol, symbol.path2_symbol && (symbol.pathOk = !0), + flowChart.handle(nextSymbol); + }, symbol.path2 = function(nextSymbol) { + return symbol.path2_symbol = nextSymbol, symbol.path3_symbol && (symbol.pathOk = !0), + flowChart.handle(nextSymbol); + }, symbol.path3 = function(nextSymbol) { + return symbol.path3_symbol = nextSymbol, symbol.path1_symbol && (symbol.pathOk = !0), + flowChart.handle(nextSymbol); }) : symbol.then = function(nextSymbol) { return symbol.next = nextSymbol, symbol.pathOk = !0, flowChart.handle(nextSymbol); }, symbol; @@ -804,7 +890,7 @@ paperDom.parentNode.removeChild(paperDom); } }, module.exports = FlowChart; - }, /* 7 */ + }, /* 8 */ /*!***********************************!*\ !*** ./src/flowchart.defaults.js ***! \***********************************/ @@ -836,10 +922,11 @@ condition: {}, inputoutput: {}, operation: {}, - subroutine: {} + subroutine: {}, + parallel: {} } }; - }, /* 8 */ + }, /* 9 */ /*!*******************************!*\ !*** ./src/flowchart.shim.js ***! \*******************************/ @@ -869,7 +956,7 @@ }), String.prototype.trim || (String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); }); - }, /* 9 */ + }, /* 10 */ /*!*************************************!*\ !*** ./src/flowchart.symbol.end.js ***! \*************************************/ @@ -881,7 +968,7 @@ } var Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2), inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits; inherits(End, Symbol), module.exports = End; - }, /* 10 */ + }, /* 11 */ /*!*********************************************!*\ !*** ./src/flowchart.symbol.inputoutput.js ***! \*********************************************/ @@ -935,7 +1022,7 @@ y: y }; }, module.exports = InputOutput; - }, /* 11 */ + }, /* 12 */ /*!*******************************************!*\ !*** ./src/flowchart.symbol.operation.js ***! \*******************************************/ @@ -947,7 +1034,7 @@ } var Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2), inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits; inherits(Operation, Symbol), module.exports = Operation; - }, /* 12 */ + }, /* 13 */ /*!***************************************!*\ !*** ./src/flowchart.symbol.start.js ***! \***************************************/ @@ -959,7 +1046,7 @@ } var Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2), inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits; inherits(Start, Symbol), module.exports = Start; - }, /* 13 */ + }, /* 14 */ /*!********************************************!*\ !*** ./src/flowchart.symbol.subroutine.js ***! \********************************************/ @@ -993,7 +1080,7 @@ } var Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2), inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits; inherits(Subroutine, Symbol), module.exports = Subroutine; - }, /* 14 */ + }, /* 15 */ /*!******************************!*\ !*** ./src/jquery-plugin.js ***! \******************************/ @@ -1010,13 +1097,13 @@ }; }(jQuery); } - }, /* 15 */ + }, /* 16 */ /*!**************************!*\ !*** external "Raphael" ***! \**************************/ /***/ function(module, exports) { - module.exports = __WEBPACK_EXTERNAL_MODULE_15__; + module.exports = __WEBPACK_EXTERNAL_MODULE_16__; } ]); }); //# sourceMappingURL=flowchart.js.map \ No newline at end of file diff --git a/release/flowchart.js.map b/release/flowchart.js.map index 1401e1e5..450a30ec 100644 --- a/release/flowchart.js.map +++ b/release/flowchart.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 06cdd547fba3c3321e5f","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","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","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","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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) {\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 }\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 */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t\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/***/ },\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 {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 06cdd547fba3c3321e5f\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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) {\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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n 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\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s); \n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)]; \n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n 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 {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 81c30d3c1c6c945a2358","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","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","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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) {\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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t 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 var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ },\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ },\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 81c30d3c1c6c945a2358\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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) {\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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n 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\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n 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 {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","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 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 var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\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\n **/","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 (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\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n '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\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 13\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 14\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 15\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 16\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index e9884e51..ade3f053 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,7 +1,7 @@ -// flowchart.js, v1.10.0 +// flowchart.js, v1.11.0 // Copyright (c)2018 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js -!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(8);var r=e(4);e(14);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),n=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),n&&this.text.attr({"font-weight":n}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var o=this.getAttr("maxWidth");if(o){for(var h=i.text.split(" "),a="",x=0,l=h.length;l>x;x++){var y=h[x];this.text.attr("text",a+" "+y),a+=this.text.getBBox().width>o?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*g,height:this.text.getBBox().height+2*g}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),n=s.drawLine,o=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function s(){for(var i,r=!1,n=0,o=e.chart.symbols.length;o>n;n++){i=e.chart.symbols[n];var h=Math.abs(i.getCenter().x-e.next.getCenter().x);if(i.getCenter().y>e.next.getCenter().y&&h<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),s())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),l=this.getTop(),y=this.getLeft(),g=t.getCenter().x,f=t.getCenter().y,p=t.getTop(),c=t.getRight(),u=t.getLeft(),d=s===g,m=h===f,b=f>h,v=h>f||this===t,w=s>g,k=g>s,_=0,B=this.getAttr("line-length"),A=this.getAttr("line-width");if(e&&"bottom"!==e||!d||!b)if(e&&"right"!==e||!m||!k)if(e&&"left"!==e||!m||!w)if(e&&"right"!==e||!d||!v)if(e&&"right"!==e||!d||!b)if(e&&"bottom"!==e||!w)if(e&&"bottom"!==e||!k)if(e&&"right"===e&&w)r=n(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:p.y-B/2},{x:p.x,y:p.y-B/2},{x:p.x,y:p.y}],i),this.rightStart=!0,t.topEnd=!0,_=a.x+B/2;else if(e&&"right"===e&&k)r=n(this.chart,a,[{x:p.x,y:a.y},{x:p.x,y:p.y}],i),this.rightStart=!0,t.topEnd=!0,_=a.x+B/2;else if(e&&"bottom"===e&&d&&v)r=n(this.chart,x,[{x:x.x,y:x.y+B/2},{x:a.x+B/2,y:x.y+B/2},{x:a.x+B/2,y:p.y-B/2},{x:p.x,y:p.y-B/2},{x:p.x,y:p.y}],i),this.bottomStart=!0,t.topEnd=!0,_=x.x+B/2;else if("left"===e&&d&&v){var O=y.x-B/2;u.xL;L++)for(var X,S=this.chart.lines[L],T=S.attr("path"),Y=r.attr("path"),C=0,E=T.length-1;E>C;C++){var j=[];j.push(["M",T[C][1],T[C][2]]),j.push(["L",T[C+1][1],T[C+1][2]]);for(var z=j[0][1],P=j[0][2],R=j[1][1],F=j[1][2],I=0,N=Y.length-1;N>I;I++){var W=[];W.push(["M",Y[I][1],Y[I][2]]),W.push(["L",Y[I+1][1],Y[I+1][2]]);var V=W[0][1],q=W[0][2],G=W[1][1],Q=W[1][2],J=o(z,P,R,F,V,q,G,Q);if(J.onLine1&&J.onLine2){var $;q===Q?V>G?($=["L",J.x+2*A,q],Y.splice(I+1,0,$),$=["C",J.x+2*A,q,J.x,q-4*A,J.x-2*A,q],Y.splice(I+2,0,$),r.attr("path",Y)):($=["L",J.x-2*A,q],Y.splice(I+1,0,$),$=["C",J.x-2*A,q,J.x,q-4*A,J.x+2*A,q],Y.splice(I+2,0,$),r.attr("path",Y)):q>Q?($=["L",V,J.y+2*A],Y.splice(I+1,0,$),$=["C",V,J.y+2*A,V+4*A,J.y,V,J.y-2*A],Y.splice(I+2,0,$),r.attr("path",Y)):($=["L",V,J.y-2*A],Y.splice(I+1,0,$),$=["C",V,J.y-2*A,V+4*A,J.y,V,J.y+2*A],Y.splice(I+2,0,$),r.attr("path",Y)),I+=2,X+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&_>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=_)},t.exports=r},function(t,i){function e(t,i,e){var r,s,n="M{0},{1}";for(r=2,s=2*e.length+2;s>r;r+=2)n+=" L{"+r+"},{"+(r+1)+"}";var o=[i.x,i.y];for(r=0,s=e.length;s>r;r++)o.push(e[r].x),o.push(e[r].y);var h=t.paper.path(n,o);h.attr("stroke",t.options["element-color"]),h.attr("stroke-width",t.options["line-width"]);var a=t.options.font,x=t.options["font-family"],l=t.options["font-weight"];return a&&h.attr({font:a}),x&&h.attr({"font-family":x}),l&&h.attr({"font-weight":l}),h}function r(t,i,e,r){var s,n;"[object Array]"!==Object.prototype.toString.call(e)&&(e=[e]);var o="M{0},{1}";for(s=2,n=2*e.length+2;n>s;s+=2)o+=" L{"+s+"},{"+(s+1)+"}";var h=[i.x,i.y];for(s=0,n=e.length;n>s;s++)h.push(e[s].x),h.push(e[s].y);var a=t.paper.path(o,h);a.attr({stroke:t.options["line-color"],"stroke-width":t.options["line-width"],"arrow-end":t.options["arrow-end"]});var x=t.options.font,l=t.options["font-family"],y=t.options["font-weight"];if(x&&a.attr({font:x}),l&&a.attr({"font-family":l}),y&&a.attr({"font-weight":y}),r){var g=!1,f=t.paper.text(0,0,r),p=!1,c=e[0];i.y===c.y&&(p=!0);var u=0,d=0;g?(u=i.x>c.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"],i.y>c.y&&(d-=2*t.options["text-margin"]))),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),l&&f.attr({"font-family":l}),y&&f.attr({"font-weight":y})}return a}function s(t,i,e,r,s,n,o,h){var a,x,l,y,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-n)*(e-t)-(o-s)*(r-i),0===a?f:(x=i-n,l=t-s,y=(o-s)*x-(h-n)*l,g=(e-t)*x-(r-i)*l,x=y/a,l=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&1>x&&(f.onLine1=!0),l>0&&1>l&&(f.onLine2=!0),f)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function r(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?g.symbols[t.substring(0,i-1)]:g.symbols[t]}function y(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=E.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var g={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new n(y,t);break;case"end":g[t.key]=new o(y,t);break;case"operation":g[t.key]=new h(y,t);break;case"inputoutput":g[t.key]=new a(y,t);break;case"subroutine":g[t.key]=new x(y,t);break;case"condition":g[t.key]=new l(y,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var y=new s(t,i);this.diagram=y;var g={};!function f(t,i,s){var n=e(t);return r.start===t?y.startWith(n):i&&s&&!i.pathOk&&(i instanceof l?(s.yes===t&&i.yes(n),s.no===t&&i.no(n)):i.then(n)),n.pathOk?n:(n instanceof l?(t.yes&&f(t.yes,n,t),t.no&&f(t.no,n,t)):t.next&&f(t.next,n,t),n)}(this.start),y.render()},clean:function(){this.diagram.clean()}},f=[],p=0,c=1,u=t.length;u>c;c++)if("\n"===t[c]&&"\\"!==t[c-1]){var d=t.substring(p,c);p=c+1,f.push(d.replace(/\\\n/g,"\n"))}pm;){var v=f[m];v.indexOf("->")<0&&v.indexOf("=>")<0&&v.indexOf("@>")<0?(f[m-1]+="\n"+v,f.splice(m,1),b--):m++}for(;f.length>0;){var w=f.splice(0,1)[0].trim();if(w.indexOf("=>")>=0){var k=w.split("=>"),_={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},B=k[0].match(/\((.*)\)/);if(B&&B.length>1)for(var A=B[1].split(","),O=0;O=0&&(M=_.symbolType.split(": "),_.symbolType=M.shift(),_.text=M.join(": ")),_.text&&_.text.indexOf(":>")>=0?(M=_.text.split(":>"),_.text=M.shift(),_.link=M.join(":>")):_.symbolType.indexOf(":>")>=0&&(M=_.symbolType.split(":>"),_.symbolType=M.shift(),_.link=M.join(":>")),_.symbolType.indexOf("\n")>=0&&(_.symbolType=_.symbolType.split("\n")[0]),_.link){var X=_.link.indexOf("[")+1,S=_.link.indexOf("]");X>=0&&S>=0&&(_.target=_.link.substring(X,S),_.link=_.link.substring(0,X-1))}if(_.text&&_.text.indexOf("|")>=0){var T=_.text.split("|");_.flowstate=T.pop().trim(),_.text=T.join("|")}g.symbols[_.key]=_}else if(w.indexOf("->")>=0)for(var Y=w.split("->"),O=0,C=Y.length;C>O;O++){var E=Y[O],j=e(E);("true"===j||"false"===j)&&(E=E.replace("true","yes"),E=E.replace("false","no"));var z=r(E),P=y(E),R=null;if(P.indexOf(",")>=0){var F=P.split(",");P=F[0],R=F[1].trim()}if(g.start||(g.start=z),C>O+1){var I=Y[O+1];z[P]=r(I),z["direction_"+P]=R,R=null}}else if(w.indexOf("@>")>=0)for(var N=w.split("@>"),O=0,C=N.length;C>O;O++)if(O+1!=C){var W=r(N[O]),I=r(N[O+1]);W.lineStyle[I.key]=JSON.parse(i(N[O+1]))}}return g}var s=e(6),n=e(12),o=e(9),h=e(11),a=e(10),x=e(13),l=e(5);t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.yes_direction="bottom",this.no_direction="right",this.params=i.params,i.yes&&i.direction_yes&&i.no&&!i.direction_no?"right"===i.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):"top"===i.direction_yes?(this.no_direction="right",this.yes_direction="top"):(this.no_direction="right",this.yes_direction="bottom"):i.yes&&!i.direction_yes&&i.no&&i.direction_no?"right"===i.direction_no?(this.yes_direction="bottom",this.no_direction="right"):(this.yes_direction="right",this.no_direction="bottom"):(this.yes_direction="bottom",this.no_direction="right"),this.yes_direction=this.yes_direction||"bottom",this.no_direction=this.no_direction||"right",this.text.attr({x:2*this.textMargin});var e=this.text.getBBox().width+3*this.textMargin;e+=e/2;var r=this.text.getBBox().height+2*this.textMargin;r+=r/2,r=Math.max(.5*e,r);var n=e/4,o=r/4;this.text.attr({x:n+this.textMargin/2});var a={x:n,y:o},x=[{x:n-e/4,y:o+r/4},{x:n-e/4+e/2,y:o+r/4+r/2},{x:n-e/4+e,y:o+r/4},{x:n-e/4+e/2,y:o+r/4-r/2},{x:n-e/4,y:o+r/4}],l=h(t,a,x);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits,o=e(3),h=o.drawPath;n(r,s),r.prototype.render=function(){this.yes_direction&&(this[this.yes_direction+"_symbol"]=this.yes_symbol),this.no_direction&&(this[this.no_direction+"_symbol"]=this.no_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.right_symbol){var e=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(e.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var r=this;!function s(){for(var i,e=!1,n=0,o=r.chart.symbols.length;o>n;n++)if(i=r.chart.symbols[n],!r.params["align-next"]||"no"!==r.params["align-next"]){var h=Math.abs(i.getCenter().x-r.right_symbol.getCenter().x);if(i.getCenter().y>r.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),s())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=n(i,o),this.symbols=[],this.lines=[],this.start=null}var s=e(15),n=e(1).defaults,o=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,n=0,o=0,h=0,a=0,x=0;for(s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],t.width>e&&(e=t.width),t.height>r&&(r=t.height);for(s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],t.shiftX(this.options.x+(e-t.width)/2+this.options["line-width"]),t.shiftY(this.options.y+(r-t.height)/2+this.options["line-width"]);for(this.start.render(),s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],t.renderLines();o=this.maxXFromLine;var l,y;for(s=0,n=this.symbols.length;n>s;s++)t=this.symbols[s],l=t.getX()+t.width,y=t.getY()+t.height,l>o&&(o=l),y>h&&(h=y);for(s=0,n=this.lines.length;n>s;s++){i=this.lines[s].getBBox(),l=i.x,y=i.y;var g=i.x2,f=i.y2;a>l&&(a=l),x>y&&(x=y),g>o&&(o=g),f>h&&(h=f)}var p=this.options.scale,c=this.options["line-width"];0>a&&(a-=c),0>x&&(x-=c);var u=o+c-a,d=h+c-x;this.paper.setSize(u*p,d*p),this.paper.setViewBox(a,x,u,d,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);e>s;s++)if(s in i&&i[s]===t)return s;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,n=this.textMargin,o=r/2,a={x:n,y:o},x=[{x:n-this.textMargin,y:r},{x:n-this.textMargin+e,y:r},{x:n-this.textMargin+e+2*this.textMargin,y:0},{x:n-this.textMargin+2*this.textMargin,y:0},{x:n,y:o}],l=h(t,a,x);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits,o=e(3),h=o.drawPath;n(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var n=this.getAttr("font"),o=this.getAttr("font-family"),h=this.getAttr("font-weight");n&&r.attr({font:n}),o&&r.attr({"font-family":o}),h&&r.attr({"font-weight":h}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),n=e(1).inherits;n(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); +!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(9);var r=e(4);e(15);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),o=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var h=this.getAttr("maxWidth");if(h){for(var n=i.text.split(" "),a="",p=0,l=n.length;l>p;p++){var x=n[p];this.text.attr("text",a+" "+x),a+=this.text.getBBox().width>h?"\n"+x:" "+x}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var y=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*y,height:this.text.getBBox().height+2*y}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),o=s.drawLine,h=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function s(){for(var i,r=!1,o=0,h=e.chart.symbols.length;h>o;o++){i=e.chart.symbols[o];var n=Math.abs(i.getCenter().x-e.next.getCenter().x);if(i.getCenter().y>e.next.getCenter().y&&n<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),s())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,n=this.getCenter().y,a=this.getRight(),p=this.getBottom(),l=this.getTop(),x=this.getLeft(),y=t.getCenter().x,g=t.getCenter().y,c=t.getTop(),f=t.getRight(),d=t.getLeft(),m=s===y,u=n===g,b=g>n,_=n>g||this===t,v=s>y,w=y>s,k=0,B=this.getAttr("line-length"),A=this.getAttr("line-width");if(e&&"bottom"!==e||!m||!b)if(e&&"right"!==e||!u||!w)if(e&&"left"!==e||!u||!v)if(e&&"right"!==e||!m||!_)if(e&&"right"!==e||!m||!b)if(e&&"bottom"!==e||!v)if(e&&"bottom"!==e||!w)if(e&&"right"===e&&v)r=o(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else if(e&&"right"===e&&w)r=o(this.chart,a,[{x:c.x,y:a.y},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else if(e&&"bottom"===e&&m&&_)r=o(this.chart,p,[{x:p.x,y:p.y+B/2},{x:a.x+B/2,y:p.y+B/2},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.bottomStart=!0,t.topEnd=!0,k=p.x+B/2;else if("left"===e&&m&&_){var O=x.x-B/2;d.xL;L++)for(var X,T=this.chart.lines[L],S=T.attr("path"),Y=r.attr("path"),C=0,E=S.length-1;E>C;C++){var j=[];j.push(["M",S[C][1],S[C][2]]),j.push(["L",S[C+1][1],S[C+1][2]]);for(var P=j[0][1],z=j[0][2],R=j[1][1],F=j[1][2],I=0,N=Y.length-1;N>I;I++){var W=[];W.push(["M",Y[I][1],Y[I][2]]),W.push(["L",Y[I+1][1],Y[I+1][2]]);var V=W[0][1],q=W[0][2],G=W[1][1],Q=W[1][2],J=h(P,z,R,F,V,q,G,Q);if(J.onLine1&&J.onLine2){var $;q===Q?V>G?($=["L",J.x+2*A,q],Y.splice(I+1,0,$),$=["C",J.x+2*A,q,J.x,q-4*A,J.x-2*A,q],Y.splice(I+2,0,$),r.attr("path",Y)):($=["L",J.x-2*A,q],Y.splice(I+1,0,$),$=["C",J.x-2*A,q,J.x,q-4*A,J.x+2*A,q],Y.splice(I+2,0,$),r.attr("path",Y)):q>Q?($=["L",V,J.y+2*A],Y.splice(I+1,0,$),$=["C",V,J.y+2*A,V+4*A,J.y,V,J.y-2*A],Y.splice(I+2,0,$),r.attr("path",Y)):($=["L",V,J.y-2*A],Y.splice(I+1,0,$),$=["C",V,J.y-2*A,V+4*A,J.y,V,J.y+2*A],Y.splice(I+2,0,$),r.attr("path",Y)),I+=2,X+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,o="M{0},{1}";for(r=2,s=2*e.length+2;s>r;r+=2)o+=" L{"+r+"},{"+(r+1)+"}";var h=[i.x,i.y];for(r=0,s=e.length;s>r;r++)h.push(e[r].x),h.push(e[r].y);var n=t.paper.path(o,h);n.attr("stroke",t.options["element-color"]),n.attr("stroke-width",t.options["line-width"]);var a=t.options.font,p=t.options["font-family"],l=t.options["font-weight"];return a&&n.attr({font:a}),p&&n.attr({"font-family":p}),l&&n.attr({"font-weight":l}),n}function r(t,i,e,r){var s,o;"[object Array]"!==Object.prototype.toString.call(e)&&(e=[e]);var h="M{0},{1}";for(s=2,o=2*e.length+2;o>s;s+=2)h+=" L{"+s+"},{"+(s+1)+"}";var n=[i.x,i.y];for(s=0,o=e.length;o>s;s++)n.push(e[s].x),n.push(e[s].y);var a=t.paper.path(h,n);a.attr({stroke:t.options["line-color"],"stroke-width":t.options["line-width"],"arrow-end":t.options["arrow-end"]});var p=t.options.font,l=t.options["font-family"],x=t.options["font-weight"];if(p&&a.attr({font:p}),l&&a.attr({"font-family":l}),x&&a.attr({"font-weight":x}),r){var y=!1,g=t.paper.text(0,0,r),c=!1,f=e[0];i.y===f.y&&(c=!0);var d=0,m=0;y?(d=i.x>f.x?i.x-(i.x-f.x)/2:f.x-(f.x-i.x)/2,m=i.y>f.y?i.y-(i.y-f.y)/2:f.y-(f.y-i.y)/2,c?(d-=g.getBBox().width/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"],m-=g.getBBox().height/2)):(d=i.x,m=i.y,c?(d+=t.options["text-margin"]/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"]/2,m+=t.options["text-margin"],i.y>f.y&&(m-=2*t.options["text-margin"]))),g.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:d,y:m}),p&&g.attr({font:p}),l&&g.attr({"font-family":l}),x&&g.attr({"font-weight":x})}return a}function s(t,i,e,r,s,o,h,n){var a,p,l,x,y,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(n-o)*(e-t)-(h-s)*(r-i),0===a?g:(p=i-o,l=t-s,x=(h-s)*p-(n-o)*l,y=(e-t)*p-(r-i)*l,p=x/a,l=y/a,g.x=t+p*(e-t),g.y=i+p*(r-i),p>0&&1>p&&(g.onLine1=!0),l>0&&1>l&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function r(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?g.symbols[t.substring(0,i-1)]:g.symbols[t]}function y(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=j.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var g={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(y,t);break;case"end":g[t.key]=new h(y,t);break;case"operation":g[t.key]=new n(y,t);break;case"inputoutput":g[t.key]=new a(y,t);break;case"subroutine":g[t.key]=new p(y,t);break;case"condition":g[t.key]=new l(y,t);break;case"parallel":g[t.key]=new x(y,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var y=new s(t,i);this.diagram=y;var g={};!function c(t,i,s){var o=e(t);return r.start===t?y.startWith(o):i&&s&&!i.pathOk&&(i instanceof l?(s.yes===t&&i.yes(o),s.no===t&&i.no(o)):i instanceof x?(s.path1===t&&i.path1(o),s.path2===t&&i.path2(o),s.path3===t&&i.path3(o)):i.then(o)),o.pathOk?o:(o instanceof l?(t.yes&&c(t.yes,o,t),t.no&&c(t.no,o,t)):o instanceof x?(t.path1&&c(t.path1,o,t),t.path2&&c(t.path2,o,t),t.path3&&c(t.path3,o,t)):t.next&&c(t.next,o,t),o)}(this.start),y.render()},clean:function(){this.diagram.clean()}},c=[],f=0,d=1,m=t.length;m>d;d++)if("\n"===t[d]&&"\\"!==t[d-1]){var u=t.substring(f,d);f=d+1,c.push(u.replace(/\\\n/g,"\n"))}fb;){var v=c[b];v.indexOf("->")<0&&v.indexOf("=>")<0&&v.indexOf("@>")<0?(c[b-1]+="\n"+v,c.splice(b,1),_--):b++}for(;c.length>0;){var w=c.splice(0,1)[0].trim();if(w.indexOf("=>")>=0){var k=w.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var O=A[1].split(","),L=0;L=0&&(X=B.symbolType.split(": "),B.symbolType=X.shift(),B.text=X.join(": ")),B.text&&B.text.indexOf(":>")>=0?(X=B.text.split(":>"),B.text=X.shift(),B.link=X.join(":>")):B.symbolType.indexOf(":>")>=0&&(X=B.symbolType.split(":>"),B.symbolType=X.shift(),B.link=X.join(":>")),B.symbolType.indexOf("\n")>=0&&(B.symbolType=B.symbolType.split("\n")[0]),B.link){var T=B.link.indexOf("[")+1,S=B.link.indexOf("]");T>=0&&S>=0&&(B.target=B.link.substring(T,S),B.link=B.link.substring(0,T-1))}if(B.text&&B.text.indexOf("|")>=0){var Y=B.text.split("|");B.flowstate=Y.pop().trim(),B.text=Y.join("|")}g.symbols[B.key]=B}else if(w.indexOf("->")>=0)for(var C=w.split("->"),L=0,E=C.length;E>L;L++){var j=C[L],P=e(j);("true"===P||"false"===P)&&(j=j.replace("true","yes"),j=j.replace("false","no"));var z=r(j),R=y(j),F=null;if(R.indexOf(",")>=0){var I=R.split(",");R=I[0],F=I[1].trim()}if(g.start||(g.start=z),E>L+1){var N=C[L+1];z[R]=r(N),z["direction_"+R]=F,F=null}}else if(w.indexOf("@>")>=0)for(var W=w.split("@>"),L=0,E=W.length;E>L;L++)if(L+1!=E){var V=r(W[L]),N=r(W[L+1]);V.lineStyle[N.key]=JSON.parse(i(W[L+1]))}}return g}var s=e(7),o=e(13),h=e(10),n=e(12),a=e(11),p=e(14),l=e(5),x=e(6);t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.yes_direction="bottom",this.no_direction="right",this.params=i.params,i.yes&&i.direction_yes&&i.no&&!i.direction_no?"right"===i.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):"top"===i.direction_yes?(this.no_direction="right",this.yes_direction="top"):(this.no_direction="right",this.yes_direction="bottom"):i.yes&&!i.direction_yes&&i.no&&i.direction_no?"right"===i.direction_no?(this.yes_direction="bottom",this.no_direction="right"):(this.yes_direction="right",this.no_direction="bottom"):(this.yes_direction="bottom",this.no_direction="right"),this.yes_direction=this.yes_direction||"bottom",this.no_direction=this.no_direction||"right",this.text.attr({x:2*this.textMargin});var e=this.text.getBBox().width+3*this.textMargin;e+=e/2;var r=this.text.getBBox().height+2*this.textMargin;r+=r/2,r=Math.max(.5*e,r);var o=e/4,h=r/4;this.text.attr({x:o+this.textMargin/2});var a={x:o,y:h},p=[{x:o-e/4,y:h+r/4},{x:o-e/4+e/2,y:h+r/4+r/2},{x:o-e/4+e,y:h+r/4},{x:o-e/4+e/2,y:h+r/4-r/2},{x:o-e/4,y:h+r/4}],l=n(t,a,p);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,h=e(3),n=h.drawPath;o(r,s),r.prototype.render=function(){this.yes_direction&&(this[this.yes_direction+"_symbol"]=this.yes_symbol),this.no_direction&&(this[this.no_direction+"_symbol"]=this.no_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.right_symbol){var e=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(e.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var r=this;!function s(){for(var i,e=!1,o=0,h=r.chart.symbols.length;h>o;o++)if(i=r.chart.symbols[o],!r.params["align-next"]||"no"!==r.params["align-next"]){var n=Math.abs(i.getCenter().x-r.right_symbol.getCenter().x);if(i.getCenter().y>r.right_symbol.getCenter().y&&n<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),s())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),this.textMargin=this.getAttr("text-margin"),this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top",this.params=i.params,"path1"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path2"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path3"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),i.path1&&i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path1?(this.path2_direction="bottom",this.path1_direction="right",this.path3_direction="top"):"top"===i.direction_path1?(this.path2_direction="right",this.path1_direction="top",this.path3_direction="bottom"):"left"===i.direction_path1?(this.path2_direction="right",this.path1_direction="left",this.path3_direction="bottom"):(this.path2_direction="right",this.path1_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="left",this.path3_direction="right"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="top",this.path3_direction="right"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="left"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):(this.path1_direction=i.direction_path1,this.path2_direction=i.direction_path2,this.path3_direction=i.direction_path3),this.path1_direction=this.path1_direction||"bottom",this.path2_direction=this.path2_direction||"right",this.path3_direction=this.path3_direction||"top",this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),r.prototype.render=function(){this.path1_direction&&(this[this.path1_direction+"_symbol"]=this.path1_symbol),this.path2_direction&&(this[this.path2_direction+"_symbol"]=this.path2_symbol),this.path3_direction&&(this[this.path3_direction+"_symbol"]=this.path3_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.top_symbol){var e=this.getTop();this.top_symbol.isPositioned||(this.top_symbol.shiftY(this.getY()-this.top_symbol.height-t),this.top_symbol.setX(e.x+this.top_symbol.width),this.top_symbol.isPositioned=!0,this.top_symbol.render())}if(this.right_symbol){var r=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(r.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var s=this;!function o(){for(var i,e=!1,r=0,h=s.chart.symbols.length;h>r;r++)if(i=s.chart.symbols[r],!s.params["align-next"]||"no"!==s.params["align-next"]){var n=Math.abs(i.getCenter().x-s.right_symbol.getCenter().x);if(i.getCenter().y>s.right_symbol.getCenter().y&&n<=s.right_symbol.width/2){e=!0;break}}e&&(s.right_symbol.setX(i.getX()+i.width+t),o())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.path1_symbol&&this.drawLineTo(this.path1_symbol,"",this.path1_direction),this.path2_symbol&&this.drawLineTo(this.path2_symbol,"",this.path2_direction),this.path3_symbol&&this.drawLineTo(this.path3_symbol,"",this.path3_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=o(i,h),this.symbols=[],this.lines=[],this.start=null}var s=e(16),o=e(1).defaults,h=e(8),n=e(5),a=e(6);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof n?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t instanceof a?(t.path1=function(e){return t.path1_symbol=e,t.path2_symbol&&(t.pathOk=!0),i.handle(e)},t.path2=function(e){return t.path2_symbol=e,t.path3_symbol&&(t.pathOk=!0),i.handle(e)},t.path3=function(e){return t.path3_symbol=e,t.path1_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,o=0,h=0,n=0,a=0,p=0;for(s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],t.width>e&&(e=t.width),t.height>r&&(r=t.height);for(s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],t.shiftX(this.options.x+(e-t.width)/2+this.options["line-width"]),t.shiftY(this.options.y+(r-t.height)/2+this.options["line-width"]);for(this.start.render(),s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],t.renderLines();h=this.maxXFromLine;var l,x;for(s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],l=t.getX()+t.width,x=t.getY()+t.height,l>h&&(h=l),x>n&&(n=x);for(s=0,o=this.lines.length;o>s;s++){i=this.lines[s].getBBox(),l=i.x,x=i.y;var y=i.x2,g=i.y2;a>l&&(a=l),p>x&&(p=x),y>h&&(h=y),g>n&&(n=g)}var c=this.options.scale,f=this.options["line-width"];0>a&&(a-=f),0>p&&(p-=f);var d=h+f-a,m=n+f-p;this.paper.setSize(d*c,m*c),this.paper.setViewBox(a,p,d,m,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{},parallel:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);e>s;s++)if(s in i&&i[s]===t)return s;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,h=r/2,a={x:o,y:h},p=[{x:o-this.textMargin,y:r},{x:o-this.textMargin+e,y:r},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:h}],l=n(t,a,p);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,h=e(3),n=h.drawPath;o(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var o=this.getAttr("font"),h=this.getAttr("font-family"),n=this.getAttr("font-weight");o&&r.attr({font:o}),h&&r.attr({"font-family":h}),n&&r.attr({"font-weight":n}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); //# sourceMappingURL=flowchart.min.js.map \ No newline at end of file diff --git a/release/flowchart.min.js.map b/release/flowchart.min.js.map index e8b5d517..886ebae6 100644 --- a/release/flowchart.min.js.map +++ b/release/flowchart.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 451ee7af3112ff0efb83","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","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","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","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":";;;;;CAAA,SAAAA,EAAAC,GACA,mBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,EAAAG,QAAA,gBACA,sBAAAC,gBAAAC,IACAD,QAAA,WAAAJ,OACA,CACA,GAAAM,GAAAN,EAAA,gBAAAC,SAAAE,QAAA,WAAAJ,EAAA,QACA,QAAAQ,KAAAD,IAAA,gBAAAL,iBAAAF,GAAAQ,GAAAD,EAAAC,KAECC,KAAA,SAAAC,GACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAX,OAGA,IAAAC,GAAAW,EAAAD,IACAX,WACAa,GAAAF,EACAG,QAAA,EAUA,OANAL,GAAAE,GAAAI,KAAAd,EAAAD,QAAAC,IAAAD,QAAAU,GAGAT,EAAAa,QAAA,EAGAb,EAAAD,QAvBA,GAAAY,KAqCA,OATAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,GAGAR,EAAA,KDmBM,SAAST,EAAQD,EAASU,GEzDhCA,EAAA,EACA,IAAAS,GAAAT,EAAA,EACAA,GAAA,GAEA,IAAAU,IACAD,QAGA,oBAAAE,UACAA,OAAAC,UAAAF,GAGAnB,EAAAD,QAAAoB,GFmEM,SAASnB,EAAQD,GG/EvB,QAAAuB,GAAAC,EAAAC,GACA,IAAAD,GAAA,kBAAAA,GACA,MAAAC,EAGA,IAAAC,KACA,QAAAC,KAAAF,GACAC,EAAAC,GAAAF,EAAAE,EAGA,KAAAA,IAAAH,GACAA,EAAAG,KACA,gBAAAD,GAAAC,GACAD,EAAAC,GAAAJ,EAAAG,EAAAC,GAAAH,EAAAG,IAEAD,EAAAC,GAAAH,EAAAG,GAIA,OAAAD,GAGA,QAAAE,GAAAC,EAAAC,GACA,qBAAAC,QAAA,OAEAF,EAAAG,OAAAF,EACAD,EAAAI,UAAAF,OAAAG,OAAAJ,EAAAG,WACAE,aACAC,MAAAP,EACAQ,YAAA,EACAC,UAAA,EACAC,cAAA,SAGA,CAEAV,EAAAG,OAAAF,CACA,IAAAU,GAAA,YACAA,GAAAP,UAAAH,EAAAG,UACAJ,EAAAI,UAAA,GAAAO,GACAX,EAAAI,UAAAE,YAAAN,GAMA5B,EAAAD,SACAyC,SAAAlB,EACAmB,SAAAd,IH0FM,SAAS3B,EAAQD,EAASU,GItIhC,QAAAiC,GAAAC,EAAApB,EAAAqB,GACAtC,KAAAqC,QACArC,KAAAuC,MAAAvC,KAAAqC,MAAAG,MAAAC,MACAzC,KAAAsC,SACAtC,KAAA0C,eACA1C,KAAA2C,WAAA1B,EAAA0B,WACA3C,KAAA4C,UAAA3B,EAAA2B,WAAA,SACA5C,KAAA6C,UAAA5B,EAAA4B,cACA7C,KAAA8C,IAAA7B,EAAA6B,KAAA,GAEA9C,KAAA+C,eAAA9B,EAAA+B,MAAA/B,EAAA,eAAAA,EAAA,eAAAgC,OAEAjD,KAAAkD,KAAAlD,KAAAqC,MAAAG,MAAAU,KAAA,IAAAjC,EAAAiC,MAEAjC,EAAA6B,MAAA9C,KAAAkD,KAAAC,KAAA7C,GAAAW,EAAA6B,IAAA,KACA9C,KAAAkD,KAAAC,KAAAC,aAAA,QAAApD,KAAAqD,QAAA,cAEArD,KAAAkD,KAAAI,MACAC,cAAA,QACAC,EAAAxD,KAAAqD,QAAA,eACAI,KAAAzD,KAAAqD,QAAA,cACAK,YAAA1D,KAAAqD,QAAA,cAGA,IAAAM,GAAA3D,KAAAqD,QAAA,QACAO,EAAA5D,KAAAqD,QAAA,eACAQ,EAAA7D,KAAAqD,QAAA,cAEAM,IAAA3D,KAAAkD,KAAAI,MAAAK,SACAC,GAAA5D,KAAAkD,KAAAI,MAAAQ,cAAAF,IACAC,GAAA7D,KAAAkD,KAAAI,MAAAS,cAAAF,IAEA5C,EAAA+C,MAAAhE,KAAAkD,KAAAI,KAAA,OAAArC,EAAA+C,MACA/C,EAAAgD,QAAAjE,KAAAkD,KAAAI,KAAA,SAAArC,EAAAgD,OAEA,IAAAC,GAAAlE,KAAAqD,QAAA,WACA,IAAAa,EAAA,CAIA,OAFAC,GAAAlD,EAAAiC,KAAAkB,MAAA,KACAC,EAAA,GACAtE,EAAA,EAAAuE,EAAAH,EAAAI,OAAAD,EAAAvE,MAAA,CACA,GAAAyE,GAAAL,EAAApE,EACAC,MAAAkD,KAAAI,KAAA,OAAAe,EAAA,IAAAG,GAEAH,GADArE,KAAAkD,KAAAuB,UAAAC,MAAAR,EACA,KAAAM,EAEA,IAAAA,EAGAxE,KAAAkD,KAAAI,KAAA,OAAAe,EAAAM,UAAA,IAKA,GAFA3E,KAAAuC,MAAAqC,KAAA5E,KAAAkD,MAEAZ,EAAA,CACA,GAAAuC,GAAA7E,KAAAqD,QAAA,cAEAf,GAAAgB,MACAG,KAAAzD,KAAAqD,QAAA,QACAyB,OAAA9E,KAAAqD,QAAA,iBACA0B,eAAA/E,KAAAqD,QAAA,cACAqB,MAAA1E,KAAAkD,KAAAuB,UAAAC,MAAA,EAAAG,EACAG,OAAAhF,KAAAkD,KAAAuB,UAAAO,OAAA,EAAAH,IAGAvC,EAAAa,KAAAC,aAAA,QAAApD,KAAAqD,QAAA,UAEApC,EAAA+C,MAAA1B,EAAAgB,KAAA,OAAArC,EAAA+C,MACA/C,EAAAgD,QAAA3B,EAAAgB,KAAA,SAAArC,EAAAgD,QACAhD,EAAA6B,MAAAR,EAAAa,KAAA7C,GAAAW,EAAA6B,KAEA9C,KAAAuC,MAAAqC,KAAAtC,GACAA,EAAA2C,aAAAjF,KAAAkD,MAEAlD,KAAAkD,KAAAI,MACA4B,EAAA5C,EAAAmC,UAAAO,OAAA,IAGAhF,KAAAmF,cAlFA,GAAAC,GAAAjF,EAAA,GACAkF,EAAAD,EAAAC,SACAC,EAAAF,EAAAE,qBAsFAlD,GAAAV,UAAA2B,QAAA,SAAAkC,GACA,GAAAvF,KAAAqC,MAAA,CAGA,GAEAmD,GAFAC,EAAAzF,KAAAqC,MAAA,QAAArC,KAAAqC,MAAApB,QAAAsE,GAAAtC,OACAyC,EAAA1F,KAAAqC,MAAApB,QAAA,QAAAjB,KAAAqC,MAAApB,QAAA0E,QAAA3F,KAAA2C,YAAA4C,GAAAtC,MAKA,OAHAjD,MAAAqC,MAAApB,QAAA2B,WAAA5C,KAAAqC,MAAApB,QAAA2B,UAAA5C,KAAA4C,aACA4C,EAAAxF,KAAAqC,MAAApB,QAAA2B,UAAA5C,KAAA4C,WAAA2C,IAEAC,GAAAE,GAAAD,IAGArD,EAAAV,UAAAyD,WAAA,WACAnF,KAAAuC,MAAAqD,UAAA,IAAA5F,KAAAqD,QAAA,kBAAArD,KAAAqD,QAAA,eAEArD,KAAA0E,MAAA1E,KAAAuC,MAAAkC,UAAAC,MACA1E,KAAAgF,OAAAhF,KAAAuC,MAAAkC,UAAAO,QAGA5C,EAAAV,UAAAmE,UAAA,WACA,OAAArC,EAAAxD,KAAA8F,OAAA9F,KAAA0E,MAAA,EACAQ,EAAAlF,KAAA+F,OAAA/F,KAAAgF,OAAA,IAGA5C,EAAAV,UAAAoE,KAAA,WACA,MAAA9F,MAAAuC,MAAAkC,UAAAjB,GAGApB,EAAAV,UAAAqE,KAAA,WACA,MAAA/F,MAAAuC,MAAAkC,UAAAS,GAGA9C,EAAAV,UAAAsE,OAAA,SAAAxC,GACAxD,KAAAuC,MAAAqD,UAAA,KAAA5F,KAAA8F,OAAAtC,GAAA,IAAAxD,KAAA+F,SAGA3D,EAAAV,UAAAuE,KAAA,SAAAzC,GACAxD,KAAAuC,MAAAqD,UAAA,IAAApC,EAAA,IAAAxD,KAAA+F,SAGA3D,EAAAV,UAAAwE,OAAA,SAAAhB,GACAlF,KAAAuC,MAAAqD,UAAA,IAAA5F,KAAA8F,OAAA,KAAA9F,KAAA+F,OAAAb,KAGA9C,EAAAV,UAAAyE,KAAA,SAAAjB,GACAlF,KAAAuC,MAAAqD,UAAA,IAAA5F,KAAA8F,OAAA,IAAAZ,IAGA9C,EAAAV,UAAA0E,OAAA,WACA,GAAAlB,GAAAlF,KAAA+F,OACAvC,EAAAxD,KAAA8F,OAAA9F,KAAA0E,MAAA,CACA,QAAAlB,IAAA0B,MAGA9C,EAAAV,UAAA2E,UAAA,WACA,GAAAnB,GAAAlF,KAAA+F,OAAA/F,KAAAgF,OACAxB,EAAAxD,KAAA8F,OAAA9F,KAAA0E,MAAA,CACA,QAAAlB,IAAA0B,MAGA9C,EAAAV,UAAA4E,QAAA,WACA,GAAApB,GAAAlF,KAAA+F,OAAA/F,KAAAuC,MAAAkC,UAAAO,OAAA,EACAxB,EAAAxD,KAAA8F,MACA,QAAAtC,IAAA0B,MAGA9C,EAAAV,UAAA6E,SAAA,WACA,GAAArB,GAAAlF,KAAA+F,OAAA/F,KAAAuC,MAAAkC,UAAAO,OAAA,EACAxB,EAAAxD,KAAA8F,OAAA9F,KAAAuC,MAAAkC,UAAAC,KACA,QAAAlB,IAAA0B,MAGA9C,EAAAV,UAAA8E,OAAA,WACA,GAAAxG,KAAAgD,KAAA,CAEA,GAAAyD,GAAAzG,KAAAqD,QAAA,cAEA,cAAArD,KAAA+C,eAAA,CAEA,GAAA2D,GAAA1G,KAAAuG,UAEA,KAAAvG,KAAAgD,KAAA2D,aAAA,CAEA3G,KAAAgD,KAAAmD,KAAAO,EAAAxB,EAAAlF,KAAAgD,KAAAgC,OAAA,GACAhF,KAAAgD,KAAAgD,OAAAhG,KAAAuC,MAAAkC,UAAAjB,EAAAxD,KAAA0E,MAAA+B,EAEA,IAAAG,GAAA5G,MACA,QAAA6G,KAGA,OADAC,GADAC,GAAA,EAEAhH,EAAA,EAAAiH,EAAAJ,EAAAvE,MAAAsD,QAAApB,OAAAyC,EAAAjH,MAAA,CACA+G,EAAAF,EAAAvE,MAAAsD,QAAA5F,EAEA,IAAAkH,GAAAC,KAAAC,IAAAL,EAAAjB,YAAArC,EAAAoD,EAAA5D,KAAA6C,YAAArC,EACA,IAAAsD,EAAAjB,YAAAX,EAAA0B,EAAA5D,KAAA6C,YAAAX,GAAA+B,GAAAL,EAAA5D,KAAA0B,MAAA,GACAqC,GAAA,CACA,QAIAA,IACAH,EAAA5D,KAAAiD,KAAAa,EAAAhB,OAAAgB,EAAApC,MAAA+B,GACAI,QAIA7G,KAAAgD,KAAA2D,cAAA,EAEA3G,KAAAgD,KAAAwD,cAEA,CACA,GAAAY,GAAApH,KAAAqG,WAEArG,MAAAgD,KAAA2D,eACA3G,KAAAgD,KAAAkD,OAAAlG,KAAA+F,OAAA/F,KAAAgF,OAAAyB,GACAzG,KAAAgD,KAAAiD,KAAAmB,EAAA5D,EAAAxD,KAAAgD,KAAA0B,MAAA,GACA1E,KAAAgD,KAAA2D,cAAA,EAEA3G,KAAAgD,KAAAwD,aAMApE,EAAAV,UAAA2F,YAAA,WACArH,KAAAgD,OACAhD,KAAA+C,eACA/C,KAAAsH,WAAAtH,KAAAgD,KAAAhD,KAAAqD,QAAA,kBAAArD,KAAA+C,gBAEA/C,KAAAsH,WAAAtH,KAAAgD,KAAAhD,KAAAqD,QAAA,qBAKAjB,EAAAV,UAAA4F,WAAA,SAAAhF,EAAAY,EAAAqE,GACAvH,KAAA0C,YAAA8E,QAAAlF,GAAA,GACAtC,KAAA0C,YAAAkC,KAAAtC,EAGA,IAqBAmF,GArBAjE,EAAAxD,KAAA6F,YAAArC,EACA0B,EAAAlF,KAAA6F,YAAAX,EACAwC,EAAA1H,KAAAuG,WACAoB,EAAA3H,KAAAqG,YACAuB,EAAA5H,KAAAoG,SACAyB,EAAA7H,KAAAsG,UAEAwB,EAAAxF,EAAAuD,YAAArC,EACAuE,EAAAzF,EAAAuD,YAAAX,EACA8C,EAAA1F,EAAA8D,SACA6B,EAAA3F,EAAAiE,WACA2B,EAAA5F,EAAAgE,UAEA6B,EAAA3E,IAAAsE,EACAM,EAAAlD,IAAA6C,EACAM,EAAAN,EAAA7C,EACAoD,EAAApD,EAAA6C,GAAA/H,OAAAsC,EACAiG,EAAA/E,EAAAsE,EACAU,EAAAV,EAAAtE,EAEAiF,EAAA,EAEAhC,EAAAzG,KAAAqD,QAAA,eACAqF,EAAA1I,KAAAqD,QAAA,aAEA,IAAAkE,GAAA,WAAAA,IAAAY,IAAAE,EAKA,GAAAd,GAAA,UAAAA,IAAAa,IAAAI,EAKA,GAAAjB,GAAA,SAAAA,IAAAa,IAAAG,EAKA,GAAAhB,GAAA,UAAAA,IAAAY,IAAAG,EAUA,GAAAf,GAAA,UAAAA,IAAAY,IAAAE,EAUA,GAAAd,GAAA,WAAAA,IAAAgB,EAmBA,GAAAhB,GAAA,WAAAA,IAAAiB,EAWA,GAAAjB,GAAA,UAAAA,GAAAgB,EACAd,EAAApC,EAAArF,KAAAqC,MAAAqF,IACAlE,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAAwC,EAAAxC,IACA1B,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,IACAhC,GACAlD,KAAA2I,YAAA,EACArG,EAAAsG,QAAA,EACAH,EAAAf,EAAAlE,EAAAiD,EAAA,MACA,IAAAc,GAAA,UAAAA,GAAAiB,EACAf,EAAApC,EAAArF,KAAAqC,MAAAqF,IACAlE,EAAAwE,EAAAxE,EAAA0B,EAAAwC,EAAAxC,IACA1B,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,IACAhC,GACAlD,KAAA2I,YAAA,EACArG,EAAAsG,QAAA,EACAH,EAAAf,EAAAlE,EAAAiD,EAAA,MACA,IAAAc,GAAA,WAAAA,GAAAY,GAAAG,EACAb,EAAApC,EAAArF,KAAAqC,MAAAsF,IACAnE,EAAAmE,EAAAnE,EAAA0B,EAAAyC,EAAAzC,EAAAuB,EAAA,IACAjD,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAAyC,EAAAzC,EAAAuB,EAAA,IACAjD,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,IACAhC,GACAlD,KAAA6I,aAAA,EACAvG,EAAAsG,QAAA,EACAH,EAAAd,EAAAnE,EAAAiD,EAAA,MACA,aAAAc,GAAAY,GAAAG,EAAA,CACA,GAAAQ,GAAAjB,EAAArE,EAAAiD,EAAA,CACAyB,GAAA1E,EAAAqE,EAAArE,IACAsF,EAAAZ,EAAA1E,EAAAiD,EAAA,GAEAgB,EAAApC,EAAArF,KAAAqC,MAAAwF,IACArE,EAAAsF,EAAA5D,EAAA2C,EAAA3C,IACA1B,EAAAsF,EAAA5D,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,IACAhC,GACAlD,KAAA+I,WAAA,EACAzG,EAAAsG,QAAA,EACAH,EAAAZ,EAAArE,MACA,SAAA+D,GACAE,EAAApC,EAAArF,KAAAqC,MAAAwF,IACArE,EAAAwE,EAAAxE,GAAAqE,EAAArE,EAAAwE,EAAAxE,GAAA,EAAA0B,EAAA2C,EAAA3C,IACA1B,EAAAwE,EAAAxE,GAAAqE,EAAArE,EAAAwE,EAAAxE,GAAA,EAAA0B,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,IACAhC,GACAlD,KAAA+I,WAAA,EACAzG,EAAAsG,QAAA,EACAH,EAAAZ,EAAArE,GACA,QAAA+D,IACAE,EAAApC,EAAArF,KAAAqC,MAAAuF,IACApE,EAAAoE,EAAApE,EAAA0B,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,IACAhC,GACAlD,KAAAgJ,UAAA,EACA1G,EAAAsG,QAAA,EACAH,EAAAb,EAAApE,OAvEAiE,GAAApC,EAAArF,KAAAqC,MAAAsF,IACAnE,EAAAmE,EAAAnE,EAAA0B,EAAAyC,EAAAzC,EAAAuB,EAAA,IACAjD,EAAAmE,EAAAnE,GAAAmE,EAAAnE,EAAAwE,EAAAxE,GAAA,EAAA0B,EAAAyC,EAAAzC,EAAAuB,EAAA,IACAjD,EAAAmE,EAAAnE,GAAAmE,EAAAnE,EAAAwE,EAAAxE,GAAA,EAAA0B,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,IACAhC,GACAlD,KAAA6I,aAAA,EACAvG,EAAAsG,QAAA,EACAH,EAAAd,EAAAnE,GAAAmE,EAAAnE,EAAAwE,EAAAxE,GAAA,MA3BAiE,GADAzH,KAAAiJ,SAAAX,EACAjD,EAAArF,KAAAqC,MAAAsF,IACAnE,EAAAmE,EAAAnE,EAAA0B,EAAAyC,EAAAzC,EAAAuB,EAAA,IACAjD,EAAAmE,EAAAnE,GAAAmE,EAAAnE,EAAAwE,EAAAxE,GAAA,EAAA0B,EAAAyC,EAAAzC,EAAAuB,EAAA,IACAjD,EAAAmE,EAAAnE,GAAAmE,EAAAnE,EAAAwE,EAAAxE,GAAA,EAAA0B,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,IACAhC,GAEAmC,EAAArF,KAAAqC,MAAAsF,IACAnE,EAAAmE,EAAAnE,EAAA0B,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,IACAhC,GAEAlD,KAAA6I,aAAA,EACAvG,EAAAsG,QAAA,EACAH,EAAAd,EAAAnE,GAAAmE,EAAAnE,EAAAwE,EAAAxE,GAAA,MA3BAiE,GAAApC,EAAArF,KAAAqC,MAAAqF,IACAlE,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAAwC,EAAAxC,IACA1B,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,IACAhC,GACAlD,KAAA2I,YAAA,EACArG,EAAAsG,QAAA,EACAH,EAAAf,EAAAlE,EAAAiD,EAAA,MAlBAgB,GAAApC,EAAArF,KAAAqC,MAAAqF,IACAlE,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAAwC,EAAAxC,IACA1B,EAAAkE,EAAAlE,EAAAiD,EAAA,EAAAvB,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,EAAAuB,EAAA,IACAjD,EAAAwE,EAAAxE,EAAA0B,EAAA8C,EAAA9C,IACAhC,GACAlD,KAAA2I,YAAA,EACArG,EAAAsG,QAAA,EACAH,EAAAf,EAAAlE,EAAAiD,EAAA,MAbAgB,GAAApC,EAAArF,KAAAqC,MAAAwF,EAAAI,EAAA/E,GACAlD,KAAA+I,WAAA,EACAzG,EAAA4G,UAAA,EACAT,EAAAR,EAAAzE,MARAiE,GAAApC,EAAArF,KAAAqC,MAAAqF,EAAAQ,EAAAhF,GACAlD,KAAA2I,YAAA,EACArG,EAAA2G,SAAA,EACAR,EAAAP,EAAA1E,MARAiE,GAAApC,EAAArF,KAAAqC,MAAAsF,EAAAK,EAAA9E,GACAlD,KAAA6I,aAAA,EACAvG,EAAAsG,QAAA,EACAH,EAAAd,EAAAnE,CAkIA,IAJAxD,KAAA6C,UAAAP,EAAAQ,MAAA2E,GACAA,EAAAnE,KAAAtD,KAAA6C,UAAAP,EAAAQ,MAGA2E,EAAA,CACA,OAAA0B,GAAA,EAAAC,EAAApJ,KAAAqC,MAAAgH,MAAA9E,OAAA6E,EAAAD,MAOA,OALAnC,GADAsC,EAAAtJ,KAAAqC,MAAAgH,MAAAF,GAGAI,EAAAD,EAAAhG,KAAA,QACAkG,EAAA/B,EAAAnE,KAAA,QAEAmG,EAAA,EAAAC,EAAAH,EAAAhF,OAAA,EAAAmF,EAAAD,MAAA,CACA,GAAAE,KACAA,GAAA/E,MAAA,IAAA2E,EAAAE,GAAA,GAAAF,EAAAE,GAAA,KACAE,EAAA/E,MAAA,IAAA2E,EAAAE,EAAA,MAAAF,EAAAE,EAAA,OAOA,QALAG,GAAAD,EAAA,MACAE,EAAAF,EAAA,MACAG,EAAAH,EAAA,MACAI,EAAAJ,EAAA,MAEAK,EAAA,EAAAC,EAAAT,EAAAjF,OAAA,EAAA0F,EAAAD,MAAA,CACA,GAAAE,KACAA,GAAAtF,MAAA,IAAA4E,EAAAQ,GAAA,GAAAR,EAAAQ,GAAA,KACAE,EAAAtF,MAAA,IAAA4E,EAAAQ,EAAA,MAAAR,EAAAQ,EAAA,OAEA,IAAAG,GAAAD,EAAA,MACAE,EAAAF,EAAA,MACAG,EAAAH,EAAA,MACAI,EAAAJ,EAAA,MAEAK,EAAAjF,EAAAsE,EAAAC,EAAAC,EAAAC,EAAAI,EAAAC,EAAAC,EAAAC,EACA,IAAAC,EAAAC,SAAAD,EAAAE,QAAA,CAEA,GAAAC,EACAN,KAAAE,EACAH,EAAAE,GACAK,GAAA,IAAAH,EAAA/G,EAAA,EAAAkF,EAAA0B,GACAZ,EAAAmB,OAAAX,EAAA,IAAAU,GACAA,GAAA,IAAAH,EAAA/G,EAAA,EAAAkF,EAAA0B,EAAAG,EAAA/G,EAAA4G,EAAA,EAAA1B,EAAA6B,EAAA/G,EAAA,EAAAkF,EAAA0B,GACAZ,EAAAmB,OAAAX,EAAA,IAAAU,GACAjD,EAAAnE,KAAA,OAAAkG,KAEAkB,GAAA,IAAAH,EAAA/G,EAAA,EAAAkF,EAAA0B,GACAZ,EAAAmB,OAAAX,EAAA,IAAAU,GACAA,GAAA,IAAAH,EAAA/G,EAAA,EAAAkF,EAAA0B,EAAAG,EAAA/G,EAAA4G,EAAA,EAAA1B,EAAA6B,EAAA/G,EAAA,EAAAkF,EAAA0B,GACAZ,EAAAmB,OAAAX,EAAA,IAAAU,GACAjD,EAAAnE,KAAA,OAAAkG,IAGAY,EAAAE,GACAI,GAAA,IAAAP,EAAAI,EAAArF,EAAA,EAAAwD,GACAc,EAAAmB,OAAAX,EAAA,IAAAU,GACAA,GAAA,IAAAP,EAAAI,EAAArF,EAAA,EAAAwD,EAAAyB,EAAA,EAAAzB,EAAA6B,EAAArF,EAAAiF,EAAAI,EAAArF,EAAA,EAAAwD,GACAc,EAAAmB,OAAAX,EAAA,IAAAU,GACAjD,EAAAnE,KAAA,OAAAkG,KAEAkB,GAAA,IAAAP,EAAAI,EAAArF,EAAA,EAAAwD,GACAc,EAAAmB,OAAAX,EAAA,IAAAU,GACAA,GAAA,IAAAP,EAAAI,EAAArF,EAAA,EAAAwD,EAAAyB,EAAA,EAAAzB,EAAA6B,EAAArF,EAAAiF,EAAAI,EAAArF,EAAA,EAAAwD,GACAc,EAAAmB,OAAAX,EAAA,IAAAU,GACAjD,EAAAnE,KAAA,OAAAkG,IAIAQ,GAAA,EACAhD,GAAA,IAMAhH,KAAAqC,MAAAgH,MAAAzE,KAAA6C,KAGAzH,KAAAqC,MAAAuI,cAAA5K,KAAAqC,MAAAuI,cAAAnC,EAAAzI,KAAAqC,MAAAuI,gBACA5K,KAAAqC,MAAAuI,aAAAnC,IAIA/I,EAAAD,QAAA2C,GJoJM,SAAS1C,EAAQD,GKpmBvB,QAAAoL,GAAAxI,EAAAyI,EAAAC,GACA,GAAAhL,GAAAiH,EACAgE,EAAA,UACA,KAAAjL,EAAA,EAAAiH,EAAA,EAAA+D,EAAAxG,OAAA,EAAAyC,EAAAjH,KAAA,EACAiL,GAAA,MAAAjL,EAAA,OAAAA,EAAA,MAEA,IAAAkL,IAAAH,EAAAtH,EAAAsH,EAAA5F,EACA,KAAAnF,EAAA,EAAAiH,EAAA+D,EAAAxG,OAAAyC,EAAAjH,MACAkL,EAAArG,KAAAmG,EAAAhL,GAAAyD,GACAyH,EAAArG,KAAAmG,EAAAhL,GAAAmF,EAEA,IAAA5C,GAAAD,EAAAG,MAAAwI,OAAAC,EACA3I,GAAAgB,KAAA,SAAAjB,EAAApB,QAAA,kBACAqB,EAAAgB,KAAA,eAAAjB,EAAApB,QAAA,cAEA,IAAA0C,GAAAtB,EAAApB,QAAA0C,KACAC,EAAAvB,EAAApB,QAAA,eACA4C,EAAAxB,EAAApB,QAAA,cAMA,OAJA0C,IAAArB,EAAAgB,MAAAK,SACAC,GAAAtB,EAAAgB,MAAAQ,cAAAF,IACAC,GAAAvB,EAAAgB,MAAAS,cAAAF,IAEAvB,EAGA,QAAA+C,GAAAhD,EAAA6I,EAAAC,EAAAjI,GACA,GAAAnD,GAAAiH,CAEA,oBAAAxF,OAAAE,UAAA0J,SAAA5K,KAAA2K,KACAA,MAGA,IAAAH,GAAA,UACA,KAAAjL,EAAA,EAAAiH,EAAA,EAAAmE,EAAA5G,OAAA,EAAAyC,EAAAjH,KAAA,EACAiL,GAAA,MAAAjL,EAAA,OAAAA,EAAA,MAEA,IAAAkL,IAAAC,EAAA1H,EAAA0H,EAAAhG,EACA,KAAAnF,EAAA,EAAAiH,EAAAmE,EAAA5G,OAAAyC,EAAAjH,MACAkL,EAAArG,KAAAuG,EAAApL,GAAAyD,GACAyH,EAAArG,KAAAuG,EAAApL,GAAAmF,EAGA,IAAAuC,GAAApF,EAAAG,MAAAwI,OAAAC,EACAxD,GAAAnE,MACAwB,OAAAzC,EAAApB,QAAA,cACA8D,eAAA1C,EAAApB,QAAA,cACAoK,YAAAhJ,EAAApB,QAAA,cAGA,IAAA0C,GAAAtB,EAAApB,QAAA0C,KACAC,EAAAvB,EAAApB,QAAA,eACA4C,EAAAxB,EAAApB,QAAA,cAMA,IAJA0C,GAAA8D,EAAAnE,MAAAK,SACAC,GAAA6D,EAAAnE,MAAAQ,cAAAF,IACAC,GAAA4D,EAAAnE,MAAAS,cAAAF,IAEAX,EAAA,CAEA,GAAAoI,IAAA,EAEAC,EAAAlJ,EAAAG,MAAAU,KAAA,IAAAA,GAEAsI,GAAA,EACAC,EAAAN,EAAA,EAEAD,GAAAhG,IAAAuG,EAAAvG,IACAsG,GAAA,EAGA,IAAAhI,GAAA,EACA0B,EAAA,CAEAoG,IAEA9H,EADA0H,EAAA1H,EAAAiI,EAAAjI,EACA0H,EAAA1H,GAAA0H,EAAA1H,EAAAiI,EAAAjI,GAAA,EAEAiI,EAAAjI,GAAAiI,EAAAjI,EAAA0H,EAAA1H,GAAA,EAIA0B,EADAgG,EAAAhG,EAAAuG,EAAAvG,EACAgG,EAAAhG,GAAAgG,EAAAhG,EAAAuG,EAAAvG,GAAA,EAEAuG,EAAAvG,GAAAuG,EAAAvG,EAAAgG,EAAAhG,GAAA,EAGAsG,GACAhI,GAAA+H,EAAA9G,UAAAC,MAAA,EACAQ,GAAA7C,EAAApB,QAAA,iBAEAuC,GAAAnB,EAAApB,QAAA,eACAiE,GAAAqG,EAAA9G,UAAAO,OAAA,KAGAxB,EAAA0H,EAAA1H,EACA0B,EAAAgG,EAAAhG,EAEAsG,GACAhI,GAAAnB,EAAApB,QAAA,iBACAiE,GAAA7C,EAAApB,QAAA,iBAEAuC,GAAAnB,EAAApB,QAAA,iBACAiE,GAAA7C,EAAApB,QAAA,eACAiK,EAAAhG,EAAAuG,EAAAvG,IACAA,GAAA,EAAA7C,EAAApB,QAAA,kBAKAsK,EAAAjI,MACAC,cAAA,QACAG,YAAArB,EAAApB,QAAA,aACAwC,KAAApB,EAAApB,QAAA,cACAuC,IACA0B,MAGAvB,GAAA4H,EAAAjI,MAAAK,SACAC,GAAA2H,EAAAjI,MAAAQ,cAAAF,IACAC,GAAA0H,EAAAjI,MAAAS,cAAAF,IAGA,MAAA4D,GAGA,QAAAnC,GAAAoG,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAEA,GAAAC,GAAApM,EAAAqM,EAAAC,EAAAC,EAAAC,GACA9I,EAAA,KACA0B,EAAA,KACAsF,SAAA,EACAC,SAAA,EAGA,OADAyB,IAAAD,EAAAF,IAAAH,EAAAF,IAAAM,EAAAF,IAAAD,EAAAF,GACA,IAAAO,EACAI,GAEAxM,EAAA6L,EAAAI,EACAI,EAAAT,EAAAI,EACAM,GAAAJ,EAAAF,GAAAhM,GAAAmM,EAAAF,GAAAI,EACAE,GAAAT,EAAAF,GAAA5L,GAAA+L,EAAAF,GAAAQ,EACArM,EAAAsM,EAAAF,EACAC,EAAAE,EAAAH,EAGAI,EAAA9I,EAAAkI,EAAA5L,GAAA8L,EAAAF,GACAY,EAAApH,EAAAyG,EAAA7L,GAAA+L,EAAAF,GAOA7L,EAAA,KAAAA,IACAwM,EAAA9B,SAAA,GAGA2B,EAAA,KAAAA,IACAG,EAAA7B,SAAA,GAGA6B,GAGA5M,EAAAD,SACAoL,WACAxF,WACAC,0BL+mBM,SAAS5F,EAAQD,EAASU,GM/wBhC,QAAAS,GAAA2L,GAsHA,QAAAC,GAAAC,GACA,GAAAC,GAAAD,EAAAjF,QAAA,OACAmF,EAAAF,EAAAjF,QAAA,IACA,OAAAkF,IAAA,GAAAC,GAAA,EACAF,EAAA9H,UAAA+H,EAAAC,GAEA,KAGA,QAAAC,GAAAH,GACA,GAAAC,GAAAD,EAAAjF,QAAA,OACAmF,EAAAF,EAAAjF,QAAA,IACA,OAAAkF,IAAA,GAAAC,GAAA,EACAF,EAAA9H,UAAA+H,EAAAC,GAEA,GAGA,QAAAE,GAAAJ,GACA,GAAAC,GAAAD,EAAAjF,QAAA,OACAmF,EAAAF,EAAAjF,QAAA,IACA,OAAAkF,IAAA,GAAAC,GAAA,EACAtK,EAAAsD,QAAA8G,EAAA9H,UAAA,EAAA+H,EAAA,IAEArK,EAAAsD,QAAA8G,GAGA,QAAAK,GAAAL,GACA,GAAAzJ,GAAA,OACA0J,EAAAD,EAAAjF,QAAA,OACAmF,EAAAF,EAAAjF,QAAA,IASA,OARAkF,IAAA,GAAAC,GAAA,IACA3J,EAAA+J,EAAApI,UAAA+H,EAAAC,GACA3J,EAAAwE,QAAA,QACA,QAAAxE,GAAA,OAAAA,IACAA,EAAA,SAAAA,IAIAA,EA5JAuJ,KAAA,GACAA,IAAAS,MA4FA,QA1FA3K,IACAsD,WACAsH,MAAA,KACAC,QAAA,SAAAC,EAAAlM,GAWA,QAAAmM,GAAAX,GACA,GAAAY,EAAAZ,EAAA3J,KACA,MAAAuK,GAAAZ,EAAA3J,IAGA,QAAA2J,EAAA9J,YACA,YACA0K,EAAAZ,EAAA3J,KAAA,GAAAwK,GAAAC,EAAAd,EACA,MACA,WACAY,EAAAZ,EAAA3J,KAAA,GAAA0K,GAAAD,EAAAd,EACA,MACA,iBACAY,EAAAZ,EAAA3J,KAAA,GAAA2K,GAAAF,EAAAd,EACA,MACA,mBACAY,EAAAZ,EAAA3J,KAAA,GAAA4K,GAAAH,EAAAd,EACA,MACA,kBACAY,EAAAZ,EAAA3J,KAAA,GAAA6K,GAAAJ,EAAAd,EACA,MACA,iBACAY,EAAAZ,EAAA3J,KAAA,GAAA8K,GAAAL,EAAAd,EACA,MACA,SACA,UAAAoB,OAAA,sBAGA,MAAAR,GAAAZ,EAAA3J,KAtCA,GAAA8D,GAAA5G,IAEAA,MAAAuN,SACAvN,KAAAuN,QAAAO,OAGA,IAAAP,GAAA,GAAA1M,GAAAsM,EAAAlM,EACAjB,MAAAuN,SACA,IAAAF,OAiCA,QAAAU,GAAAtB,EAAAuB,EAAAC,GACA,GAAAC,GAAAd,EAAAX,EAiBA,OAfA7F,GAAAqG,QAAAR,EACAc,EAAAY,UAAAD,GACAF,GAAAC,IAAAD,EAAAI,SACAJ,YAAA,IACAC,EAAAI,MAAA5B,GACAuB,EAAAK,IAAAH,GAEAD,EAAAK,KAAA7B,GACAuB,EAAAM,GAAAJ,IAGAF,EAAAO,KAAAL,IAIAA,EAAAE,OACAF,GAGAA,YAAA,IACAzB,EAAA4B,KACAN,EAAAtB,EAAA4B,IAAAH,EAAAzB,GAEAA,EAAA6B,IACAP,EAAAtB,EAAA6B,GAAAJ,EAAAzB,IAEAA,EAAAzJ,MACA+K,EAAAtB,EAAAzJ,KAAAkL,EAAAzB,GAGAyB,IACAlO,KAAAiN,OAEAM,EAAA/G,UAEAsH,MAAA,WACA9N,KAAAuN,QAAAO,UAIAzE,KACAmF,EAAA,EACAC,EAAA,EAAAC,EAAAnC,EAAAhI,OAAAmK,EAAAD,MACA,UAAAlC,EAAAkC,IAAA,OAAAlC,EAAAkC,EAAA,IACA,GAAAE,GAAApC,EAAA5H,UAAA6J,EAAAC,EACAD,GAAAC,EAAA,EACApF,EAAAzE,KAAA+J,EAAAC,QAAA,eAIAJ,EAAAjC,EAAAhI,QACA8E,EAAAzE,KAAA2H,EAAAsC,OAAAL,GAGA,QAAArF,GAAA,EAAAnC,EAAAqC,EAAA9E,OAAAyC,EAAAmC,GAAA,CACA,GAAA2F,GAAAzF,EAAAF,EAEA2F,GAAAtH,QAAA,SAAAsH,EAAAtH,QAAA,SAAAsH,EAAAtH,QAAA,SACA6B,EAAAF,EAAA,SAAA2F,EACAzF,EAAAsB,OAAAxB,EAAA,GACAnC,KAEAmC,IA8CA,KAAAE,EAAA9E,OAAA,IACA,GAAAkD,GAAA4B,EAAAsB,OAAA,QAAAqC,MAEA,IAAAvF,EAAAD,QAAA,UAEA,GAAAuH,GAAAtH,EAAArD,MAAA,MACA9B,GACAQ,IAAAiM,EAAA,GAAAH,QAAA,aACAjM,WAAAoM,EAAA,GACA7L,KAAA,KACAc,KAAA,KACAC,OAAA,KACArB,UAAA,KACAC,aACAmM,WAIAA,EAAAD,EAAA,GAAAE,MAAA,WACA,IAAAD,KAAAzK,OAAA,EAEA,OADA2K,GAAAF,EAAA,GAAA5K,MAAA,KACArE,EAAA,EAAAA,EAAAmP,EAAA3K,OAAAxE,IAAA,CACA,GAAAoP,GAAAD,EAAA,GAAA9K,MAAA,IACA,IAAA+K,EAAA5K,SACAjC,EAAA0M,OAAAG,EAAA,IAAAA,EAAA,IAKA,GAAAC,EAuBA,IArBA9M,EAAAK,WAAA6E,QAAA,WACA4H,EAAA9M,EAAAK,WAAAyB,MAAA,MACA9B,EAAAK,WAAAyM,EAAAvI,QACAvE,EAAAY,KAAAkM,EAAAC,KAAA,OAGA/M,EAAAY,MAAAZ,EAAAY,KAAAsE,QAAA,UACA4H,EAAA9M,EAAAY,KAAAkB,MAAA,MACA9B,EAAAY,KAAAkM,EAAAvI,QACAvE,EAAA0B,KAAAoL,EAAAC,KAAA,OACA/M,EAAAK,WAAA6E,QAAA,WACA4H,EAAA9M,EAAAK,WAAAyB,MAAA,MACA9B,EAAAK,WAAAyM,EAAAvI,QACAvE,EAAA0B,KAAAoL,EAAAC,KAAA,OAGA/M,EAAAK,WAAA6E,QAAA,WACAlF,EAAAK,WAAAL,EAAAK,WAAAyB,MAAA,UAIA9B,EAAA0B,KAAA,CACA,GAAA0I,GAAApK,EAAA0B,KAAAwD,QAAA,OACAmF,EAAArK,EAAA0B,KAAAwD,QAAA,IACAkF,IAAA,GAAAC,GAAA,IACArK,EAAA2B,OAAA3B,EAAA0B,KAAAW,UAAA+H,EAAAC,GACArK,EAAA0B,KAAA1B,EAAA0B,KAAAW,UAAA,EAAA+H,EAAA,IAMA,GAAApK,EAAAY,MACAZ,EAAAY,KAAAsE,QAAA,SACA,GAAA8H,GAAAhN,EAAAY,KAAAkB,MAAA,IACA9B,GAAAM,UAAA0M,EAAAC,MAAAvC,OACA1K,EAAAY,KAAAoM,EAAAD,KAAA,KAKAhN,EAAAsD,QAAArD,EAAAQ,KAAAR,MAEA,IAAAmF,EAAAD,QAAA,SAGA,OADAgI,GAAA/H,EAAArD,MAAA,MACArE,EAAA,EAAA0P,EAAAD,EAAAjL,OAAAkL,EAAA1P,MAAA,CACA,GAAAgN,GAAAyC,EAAAzP,GACA2P,EAAA9C,EAAAG,IAEA,SAAA2C,GAAA,UAAAA,KAEA3C,IAAA6B,QAAA,cACA7B,IAAA6B,QAAA,cAGA,IAAAe,GAAA9C,EAAAE,GACA/J,EAAA8J,EAAAC,GAEA6C,EAAA,IACA,IAAA5M,EAAAwE,QAAA,SACA,GAAAqI,GAAA7M,EAAAoB,MAAA,IACApB,GAAA6M,EAAA,GACAD,EAAAC,EAAA,GAAA7C,OAOA,GAJA3K,EAAA4K,QACA5K,EAAA4K,MAAA0C,GAGAF,EAAA1P,EAAA,GACA,GAAA+P,GAAAN,EAAAzP,EAAA,EACA4P,GAAA3M,GAAA6J,EAAAiD,GACAH,EAAA,aAAA3M,GAAA4M,EACAA,EAAA,UAGA,IAAAnI,EAAAD,QAAA,SAIA,OADAuI,GAAAtI,EAAArD,MAAA,MACArE,EAAA,EAAA0P,EAAAM,EAAAxL,OAAAkL,EAAA1P,MAEA,GAAAA,EAAA,GAAA0P,EAAA,CACA,GAAAO,GAAAnD,EAAAkD,EAAAhQ,IACA+P,EAAAjD,EAAAkD,EAAAhQ,EAAA,GAEAiQ,GAAA,UAAAF,EAAAhN,KAAAmN,KAAArP,MAAA4L,EAAAuD,EAAAhQ,EAAA,MAMA,MAAAsC,GApSA,GAAAxB,GAAAV,EAAA,GACAmN,EAAAnN,EAAA,IACAqN,EAAArN,EAAA,GACAsN,EAAAtN,EAAA,IACAuN,EAAAvN,EAAA,IACAwN,EAAAxN,EAAA,IACAyN,EAAAzN,EAAA,EAiSAT,GAAAD,QAAAmB,GNiyBM,SAASlB,EAAQD,EAASU,GOnkChC,QAAAyN,GAAAvL,EAAApB,GACAA,QACAmB,EAAA5B,KAAAR,KAAAqC,EAAApB,GACAjB,KAAAkQ,WAAAlQ,KAAAqD,QAAA,eACArD,KAAAmQ,cAAA,SACAnQ,KAAAoQ,aAAA,QACApQ,KAAAgP,OAAA/N,EAAA+N,OACA/N,EAAAoN,KAAApN,EAAAoP,eAAApP,EAAAqN,KAAArN,EAAAqP,aACA,UAAArP,EAAAoP,eACArQ,KAAAoQ,aAAA,SACApQ,KAAAmQ,cAAA,SACA,QAAAlP,EAAAoP,eACArQ,KAAAoQ,aAAA,QACApQ,KAAAmQ,cAAA,QAEAnQ,KAAAoQ,aAAA,QACApQ,KAAAmQ,cAAA,UAEAlP,EAAAoN,MAAApN,EAAAoP,eAAApP,EAAAqN,IAAArN,EAAAqP,aACA,UAAArP,EAAAqP,cACAtQ,KAAAmQ,cAAA,SACAnQ,KAAAoQ,aAAA,UAEApQ,KAAAmQ,cAAA,QACAnQ,KAAAoQ,aAAA,WAGApQ,KAAAmQ,cAAA,SACAnQ,KAAAoQ,aAAA,SAGApQ,KAAAmQ,cAAAnQ,KAAAmQ,eAAA,SACAnQ,KAAAoQ,aAAApQ,KAAAoQ,cAAA,QAEApQ,KAAAkD,KAAAI,MACAE,EAAA,EAAAxD,KAAAkQ,YAGA,IAAAxL,GAAA1E,KAAAkD,KAAAuB,UAAAC,MAAA,EAAA1E,KAAAkQ,UACAxL,MAAA,CACA,IAAAM,GAAAhF,KAAAkD,KAAAuB,UAAAO,OAAA,EAAAhF,KAAAkQ,UACAlL,MAAA,EACAA,EAAAkC,KAAAqJ,IAAA,GAAA7L,EAAAM,EACA,IAAAwL,GAAA9L,EAAA,EACA+L,EAAAzL,EAAA,CAEAhF,MAAAkD,KAAAI,MACAE,EAAAgN,EAAAxQ,KAAAkQ,WAAA,GAGA,IAAAjD,IAAAzJ,EAAAgN,EAAAtL,EAAAuL,GACA1F,IACAvH,EAAAgN,EAAA9L,EAAA,EAAAQ,EAAAuL,EAAAzL,EAAA,IACAxB,EAAAgN,EAAA9L,EAAA,EAAAA,EAAA,EAAAQ,EAAAuL,EAAAzL,EAAA,EAAAA,EAAA,IACAxB,EAAAgN,EAAA9L,EAAA,EAAAA,EAAAQ,EAAAuL,EAAAzL,EAAA,IACAxB,EAAAgN,EAAA9L,EAAA,EAAAA,EAAA,EAAAQ,EAAAuL,EAAAzL,EAAA,EAAAA,EAAA,IACAxB,EAAAgN,EAAA9L,EAAA,EAAAQ,EAAAuL,EAAAzL,EAAA,IAGA1C,EAAAuI,EAAAxI,EAAA4K,EAAAlC,EAEAzI,GAAAgB,MACAwB,OAAA9E,KAAAqD,QAAA,iBACA0B,eAAA/E,KAAAqD,QAAA,cACAI,KAAAzD,KAAAqD,QAAA,UAEApC,EAAA+C,MAAA1B,EAAAgB,KAAA,OAAArC,EAAA+C,MACA/C,EAAAgD,QAAA3B,EAAAgB,KAAA,SAAArC,EAAAgD,QACAhD,EAAA6B,MAAAR,EAAAa,KAAA7C,GAAAW,EAAA6B,KACAR,EAAAa,KAAAC,aAAA,QAAApD,KAAAqD,QAAA,UAEArD,KAAAkD,KAAAI,MACA4B,EAAA5C,EAAAmC,UAAAO,OAAA,IAGAhF,KAAAuC,MAAAqC,KAAAtC,GACAA,EAAA2C,aAAAjF,KAAAkD,MAEAlD,KAAAmF,aAnFA,GAAA/C,GAAAjC,EAAA,GACAgC,EAAAhC,EAAA,GAAAgC,SACAiD,EAAAjF,EAAA,GACA0K,EAAAzF,EAAAyF,QAkFA1I,GAAAyL,EAAAxL,GAEAwL,EAAAlM,UAAA8E,OAAA,WAEAxG,KAAAmQ,gBACAnQ,UAAAmQ,cAAA,WAAAnQ,KAAA0Q,YAGA1Q,KAAAoQ,eACApQ,UAAAoQ,aAAA,WAAApQ,KAAA2Q,UAGA,IAAAlK,GAAAzG,KAAAqD,QAAA,cAEA,IAAArD,KAAA4Q,cAAA,CACA,GAAAxJ,GAAApH,KAAAqG,WAEArG,MAAA4Q,cAAAjK,eACA3G,KAAA4Q,cAAA1K,OAAAlG,KAAA+F,OAAA/F,KAAAgF,OAAAyB,GACAzG,KAAA4Q,cAAA3K,KAAAmB,EAAA5D,EAAAxD,KAAA4Q,cAAAlM,MAAA,GACA1E,KAAA4Q,cAAAjK,cAAA,EAEA3G,KAAA4Q,cAAApK,UAIA,GAAAxG,KAAA6Q,aAAA,CACA,GAAAnK,GAAA1G,KAAAuG,UAEA,KAAAvG,KAAA6Q,aAAAlK,aAAA,CAEA3G,KAAA6Q,aAAA1K,KAAAO,EAAAxB,EAAAlF,KAAA6Q,aAAA7L,OAAA,GACAhF,KAAA6Q,aAAA7K,OAAAhG,KAAAuC,MAAAkC,UAAAjB,EAAAxD,KAAA0E,MAAA+B,EAEA,IAAAG,GAAA5G,MACA,QAAA6G,KAGA,OADAC,GADAC,GAAA,EAEAhH,EAAA,EAAAiH,EAAAJ,EAAAvE,MAAAsD,QAAApB,OAAAyC,EAAAjH,MAGA,GAFA+G,EAAAF,EAAAvE,MAAAsD,QAAA5F,IAEA6G,EAAAoI,OAAA,sBAAApI,EAAAoI,OAAA,eACA,GAAA/H,GAAAC,KAAAC,IAAAL,EAAAjB,YAAArC,EAAAoD,EAAAiK,aAAAhL,YAAArC,EACA,IAAAsD,EAAAjB,YAAAX,EAAA0B,EAAAiK,aAAAhL,YAAAX,GAAA+B,GAAAL,EAAAiK,aAAAnM,MAAA,GACAqC,GAAA,CACA,QAKAA,IACAH,EAAAiK,aAAA5K,KAAAa,EAAAhB,OAAAgB,EAAApC,MAAA+B,GACAI,QAIA7G,KAAA6Q,aAAAlK,cAAA,EAEA3G,KAAA6Q,aAAArK,YAKAoH,EAAAlM,UAAA2F,YAAA,WACArH,KAAA0Q,YACA1Q,KAAAsH,WAAAtH,KAAA0Q,WAAA1Q,KAAAqD,QAAA,YAAArD,KAAAmQ,eAGAnQ,KAAA2Q,WACA3Q,KAAAsH,WAAAtH,KAAA2Q,UAAA3Q,KAAAqD,QAAA,WAAArD,KAAAoQ,eAIA1Q,EAAAD,QAAAmO,GPklCM,SAASlO,EAAQD,EAASU,GQ3uChC,QAAAU,GAAAsM,EAAAlM,GACAA,QAEAjB,KAAAwC,MAAA,GAAAsO,GAAA3D,GAEAnN,KAAAiB,QAAAiB,EAAAjB,EAAAC,GAEAlB,KAAA2F,WACA3F,KAAAqJ,SACArJ,KAAAiN,MAAA,KAdA,GAAA6D,GAAA3Q,EAAA,IACA+B,EAAA/B,EAAA,GAAA+B,SACAhB,EAAAf,EAAA,GACAyN,EAAAzN,EAAA,EAcAU,GAAAa,UAAAqP,OAAA,SAAAzO,GACAtC,KAAA2F,QAAA6B,QAAAlF,IAAA,IACAtC,KAAA2F,QAAAf,KAAAtC,EAGA,IAAA0O,GAAAhR,IAyBA,OAvBAsC,aAAA,IACAA,EAAA+L,IAAA,SAAA4C,GAKA,MAJA3O,GAAAoO,WAAAO,EACA3O,EAAAqO,YACArO,EAAA8L,QAAA,GAEA4C,EAAAD,OAAAE,IAEA3O,EAAAgM,GAAA,SAAA2C,GAKA,MAJA3O,GAAAqO,UAAAM,EACA3O,EAAAoO,aACApO,EAAA8L,QAAA,GAEA4C,EAAAD,OAAAE,KAGA3O,EAAAiM,KAAA,SAAA0C,GAGA,MAFA3O,GAAAU,KAAAiO,EACA3O,EAAA8L,QAAA,EACA4C,EAAAD,OAAAE,IAIA3O,GAGAzB,EAAAa,UAAAyM,UAAA,SAAA7L,GAEA,MADAtC,MAAAiN,MAAA3K,EACAtC,KAAA+Q,OAAAzO,IAGAzB,EAAAa,UAAA8E,OAAA,WACA,GAQAlE,GACAmF,EATAvD,EAAA,EACAgN,EAAA,EACAnR,EAAA,EACAiH,EAAA,EACAyB,EAAA,EACA0I,EAAA,EACAC,EAAA,EACAC,EAAA,CAIA,KAAAtR,EAAA,EAAAiH,EAAAhH,KAAA2F,QAAApB,OAAAyC,EAAAjH,MACAuC,EAAAtC,KAAA2F,QAAA5F,GACAuC,EAAAoC,MAAAR,IACAA,EAAA5B,EAAAoC,OAEApC,EAAA0C,OAAAkM,IACAA,EAAA5O,EAAA0C,OAIA,KAAAjF,EAAA,EAAAiH,EAAAhH,KAAA2F,QAAApB,OAAAyC,EAAAjH,MACAuC,EAAAtC,KAAA2F,QAAA5F,GACAuC,EAAA0D,OAAAhG,KAAAiB,QAAAuC,GAAAU,EAAA5B,EAAAoC,OAAA,EAAA1E,KAAAiB,QAAA,eACAqB,EAAA4D,OAAAlG,KAAAiB,QAAAiE,GAAAgM,EAAA5O,EAAA0C,QAAA,EAAAhF,KAAAiB,QAAA,cASA,KANAjB,KAAAiN,MAAAzG,SAMAzG,EAAA,EAAAiH,EAAAhH,KAAA2F,QAAApB,OAAAyC,EAAAjH,MACAuC,EAAAtC,KAAA2F,QAAA5F,GACAuC,EAAA+E,aAGAoB,GAAAzI,KAAA4K,YAEA,IAAApH,GACA0B,CAEA,KAAAnF,EAAA,EAAAiH,EAAAhH,KAAA2F,QAAApB,OAAAyC,EAAAjH,MACAuC,EAAAtC,KAAA2F,QAAA5F,GACAyD,EAAAlB,EAAAwD,OAAAxD,EAAAoC,MACAQ,EAAA5C,EAAAyD,OAAAzD,EAAA0C,OACAxB,EAAAiF,IACAA,EAAAjF,GAEA0B,EAAAiM,IACAA,EAAAjM,EAIA,KAAAnF,EAAA,EAAAiH,EAAAhH,KAAAqJ,MAAA9E,OAAAyC,EAAAjH,MAAA,CACA0H,EAAAzH,KAAAqJ,MAAAtJ,GAAA0E,UACAjB,EAAAiE,EAAAjE,EACA0B,EAAAuC,EAAAvC,CACA,IAAAoM,GAAA7J,EAAA6J,GACAC,EAAA9J,EAAA8J,EACAH,GAAA5N,IACA4N,EAAA5N,GAEA6N,EAAAnM,IACAmM,EAAAnM,GAEAoM,EAAA7I,IACAA,EAAA6I,GAEAC,EAAAJ,IACAA,EAAAI,GAIA,GAAAC,GAAAxR,KAAAiB,QAAA,MACAwQ,EAAAzR,KAAAiB,QAAA,aAEA,GAAAmQ,OAAAK,GACA,EAAAJ,OAAAI,EAEA,IAAA/M,GAAA+D,EAAAgJ,EAAAL,EACApM,EAAAmM,EAAAM,EAAAJ,CAEArR,MAAAwC,MAAAkP,QAAAhN,EAAA8M,EAAAxM,EAAAwM,GACAxR,KAAAwC,MAAAmP,WAAAP,EAAAC,EAAA3M,EAAAM,GAAA,IAGAnE,EAAAa,UAAAoM,MAAA,WACA,GAAA9N,KAAAwC,MAAA,CACA,GAAAoP,GAAA5R,KAAAwC,MAAAqP,MACAD,GAAAE,WAAAC,YAAAH,KAIAlS,EAAAD,QAAAoB,GR0vCM,SAASnB,EAAQD,GSh5CvBC,EAAAD,SACA+D,EAAA,EACA0B,EAAA,EACA8M,aAAA,EACAC,cAAA,GACAC,cAAA,GACAxO,YAAA,GACAyO,aAAA,QAIAC,aAAA,QACAC,gBAAA,QACA5O,KAAA,QACA6O,WAAA,MACAC,UAAA,KACAlH,YAAA,QACAmH,QAAA,YACAhB,MAAA,EACA7L,SACAsH,SACAwF,OACAC,aACAC,eACAC,aACAC,iBTm6CM,SAASnT,EAAQD,GU57CvBqT,MAAApR,UAAA8F,UACAsL,MAAApR,UAAA8F,QAAA,SAAAuL,GACA,YACA,WAAA/S,KACA,SAAAgT,UAEA,IAAAC,GAAAzR,OAAAxB,MACAgH,EAAAiM,EAAA1O,SAAA,CACA,QAAAyC,EACA,QAEA,IAAAkM,GAAA,CASA,IARAC,UAAA5O,OAAA,IACA2O,EAAAE,OAAAD,UAAA,IACAD,KACAA,EAAA,EACA,IAAAA,MAAAG,KAAAH,KAAAG,OACAH,KAAA,OAAAhM,KAAAoM,MAAApM,KAAAC,IAAA+L,MAGAA,GAAAlM,EACA,QAGA,KADA,GAAAuM,GAAAL,GAAA,EAAAA,EAAAhM,KAAAqJ,IAAAvJ,EAAAE,KAAAC,IAAA+L,GAAA,GACAlM,EAAAuM,MACA,GAAAA,IAAAN,MAAAM,KAAAR,EACA,MAAAQ,EAGA,YAKAT,MAAApR,UAAA8R,cACAV,MAAApR,UAAA8R,YAAA,SAAAT,GACA,YACA,WAAA/S,KACA,SAAAgT,UAEA,IAAAC,GAAAzR,OAAAxB,MACAgH,EAAAiM,EAAA1O,SAAA,CACA,QAAAyC,EACA,QAEA,IAAAkM,GAAAlM,CACAmM,WAAA5O,OAAA,IACA2O,EAAAE,OAAAD,UAAA,IACAD,KACAA,EAAA,EACA,IAAAA,MAAA,KAAAA,KAAA,OACAA,KAAA,OAAAhM,KAAAoM,MAAApM,KAAAC,IAAA+L,KAIA,KADA,GAAAK,GAAAL,GAAA,EAAAhM,KAAAuM,IAAAP,EAAAlM,EAAA,GAAAA,EAAAE,KAAAC,IAAA+L,GACAK,GAAA,EAAAA,IACA,GAAAA,IAAAN,MAAAM,KAAAR,EACA,MAAAQ,EAGA,YAIAG,OAAAhS,UAAAsL,OACA0G,OAAAhS,UAAAsL,KAAA,WACA,MAAAhN,MAAA4O,QAAA,oBVw8CM,SAASlP,EAAQD,EAASU,GWxgDhC,QAAAqN,GAAAnL,EAAApB,GACA,GAAAqB,GAAAD,EAAAG,MAAAmR,KAAA,WACA1S,SACAA,EAAAiC,KAAAjC,EAAAiC,MAAA,MACAd,EAAA5B,KAAAR,KAAAqC,EAAApB,EAAAqB,GAPA,GAAAF,GAAAjC,EAAA,GACAgC,EAAAhC,EAAA,GAAAgC,QAQAA,GAAAqL,EAAApL,GAEA1C,EAAAD,QAAA+N,GXqhDM,SAAS9N,EAAQD,EAASU,GY3hDhC,QAAAuN,GAAArL,EAAApB,GACAA,QACAmB,EAAA5B,KAAAR,KAAAqC,EAAApB,GACAjB,KAAAkQ,WAAAlQ,KAAAqD,QAAA,eAEArD,KAAAkD,KAAAI,MACAE,EAAA,EAAAxD,KAAAkQ,YAGA,IAAAxL,GAAA1E,KAAAkD,KAAAuB,UAAAC,MAAA,EAAA1E,KAAAkQ,WACAlL,EAAAhF,KAAAkD,KAAAuB,UAAAO,OAAA,EAAAhF,KAAAkQ,WACAM,EAAAxQ,KAAAkQ,WACAO,EAAAzL,EAAA,EAEAiI,GAAAzJ,EAAAgN,EAAAtL,EAAAuL,GACA1F,IACAvH,EAAAgN,EAAAxQ,KAAAkQ,WAAAhL,EAAAF,IACAxB,EAAAgN,EAAAxQ,KAAAkQ,WAAAxL,EAAAQ,EAAAF,IACAxB,EAAAgN,EAAAxQ,KAAAkQ,WAAAxL,EAAA,EAAA1E,KAAAkQ,WAAAhL,EAAA,IACA1B,EAAAgN,EAAAxQ,KAAAkQ,WAAA,EAAAlQ,KAAAkQ,WAAAhL,EAAA,IACA1B,EAAAgN,EAAAtL,EAAAuL,IAGAnO,EAAAuI,EAAAxI,EAAA4K,EAAAlC,EAEAzI,GAAAgB,MACAwB,OAAA9E,KAAAqD,QAAA,iBACA0B,eAAA/E,KAAAqD,QAAA,cACAI,KAAAzD,KAAAqD,QAAA,UAEApC,EAAA+C,MAAA1B,EAAAgB,KAAA,OAAArC,EAAA+C,MACA/C,EAAAgD,QAAA3B,EAAAgB,KAAA,SAAArC,EAAAgD,QACAhD,EAAA6B,MAAAR,EAAAa,KAAA7C,GAAAW,EAAA6B,KACAR,EAAAa,KAAAC,aAAA,QAAApD,KAAAqD,QAAA,UAEArD,KAAAkD,KAAAI,MACA4B,EAAA5C,EAAAmC,UAAAO,OAAA,IAGAhF,KAAAuC,MAAAqC,KAAAtC,GACAA,EAAA2C,aAAAjF,KAAAkD,MAEAlD,KAAAmF,aA/CA,GAAA/C,GAAAjC,EAAA,GACAgC,EAAAhC,EAAA,GAAAgC,SACAiD,EAAAjF,EAAA,GACA0K,EAAAzF,EAAAyF,QA8CA1I,GAAAuL,EAAAtL,GAEAsL,EAAAhM,UAAA4E,QAAA,WACA,GAAApB,GAAAlF,KAAA+F,OAAA/F,KAAAuC,MAAAkC,UAAAO,OAAA,EACAxB,EAAAxD,KAAA8F,OAAA9F,KAAAkQ,UACA,QAAA1M,IAAA0B,MAGAwI,EAAAhM,UAAA6E,SAAA,WACA,GAAArB,GAAAlF,KAAA+F,OAAA/F,KAAAuC,MAAAkC,UAAAO,OAAA,EACAxB,EAAAxD,KAAA8F,OAAA9F,KAAAuC,MAAAkC,UAAAC,MAAA1E,KAAAkQ,UACA,QAAA1M,IAAA0B,MAGAxF,EAAAD,QAAAiO,GZ0iDM,SAAShO,EAAQD,EAASU,GatmDhC,QAAAsN,GAAApL,EAAApB,GACA,GAAAqB,GAAAD,EAAAG,MAAAmR,KAAA,QACA1S,SACAmB,EAAA5B,KAAAR,KAAAqC,EAAApB,EAAAqB,GANA,GAAAF,GAAAjC,EAAA,GACAgC,EAAAhC,EAAA,GAAAgC,QAOAA,GAAAsL,EAAArL,GAEA1C,EAAAD,QAAAgO,GbmnDM,SAAS/N,EAAQD,EAASU,Gc1nDhC,QAAAmN,GAAAjL,EAAApB,GACA,GAAAqB,GAAAD,EAAAG,MAAAmR,KAAA,WACA1S,SACAA,EAAAiC,KAAAjC,EAAAiC,MAAA,QACAd,EAAA5B,KAAAR,KAAAqC,EAAApB,EAAAqB,GAPA,GAAAF,GAAAjC,EAAA,GACAgC,EAAAhC,EAAA,GAAAgC,QAQAA,GAAAmL,EAAAlL,GAEA1C,EAAAD,QAAA6N,Gd8pDM,SAAS5N,EAAQD,EAASU,GetqDhC,QAAAwN,GAAAtL,EAAApB,GACA,GAAAqB,GAAAD,EAAAG,MAAAmR,KAAA,QACA1S,SACAmB,EAAA5B,KAAAR,KAAAqC,EAAApB,EAAAqB,GAEAA,EAAAgB,MACAoB,MAAA1E,KAAAkD,KAAAuB,UAAAC,MAAA,EAAA1E,KAAAqD,QAAA,iBAGArD,KAAAkD,KAAAI,MACAE,EAAA,EAAAxD,KAAAqD,QAAA,gBAGA,IAAAuQ,GAAAvR,EAAAG,MAAAmR,KAAA,QACAC,GAAAtQ,MACAE,EAAAxD,KAAAqD,QAAA,eACAyB,OAAA9E,KAAAqD,QAAA,iBACA0B,eAAA/E,KAAAqD,QAAA,cACAqB,MAAA1E,KAAAkD,KAAAuB,UAAAC,MAAA,EAAA1E,KAAAqD,QAAA,eACA2B,OAAAhF,KAAAkD,KAAAuB,UAAAO,OAAA,EAAAhF,KAAAqD,QAAA,eACAI,KAAAzD,KAAAqD,QAAA,UAEApC,EAAA6B,MAAA8Q,EAAAzQ,KAAA7C,GAAAW,EAAA6B,IAAA,IAEA,IAAAa,GAAA3D,KAAAqD,QAAA,QACAO,EAAA5D,KAAAqD,QAAA,eACAQ,EAAA7D,KAAAqD,QAAA,cAEAM,IAAAiQ,EAAAtQ,MAAAK,SACAC,GAAAgQ,EAAAtQ,MAAAQ,cAAAF,IACAC,GAAA+P,EAAAtQ,MAAAS,cAAAF,IAEA5C,EAAA+C,MAAA4P,EAAAtQ,KAAA,OAAArC,EAAA+C,MACA/C,EAAAgD,QAAA2P,EAAAtQ,KAAA,SAAArC,EAAAgD,QACAjE,KAAAuC,MAAAqC,KAAAgP,GACAA,EAAA3O,aAAAjF,KAAAkD,MAEAlD,KAAAmF,aAxCA,GAAA/C,GAAAjC,EAAA,GACAgC,EAAAhC,EAAA,GAAAgC,QAyCAA,GAAAwL,EAAAvL,GAEA1C,EAAAD,QAAAkO,GfmrDM,SAASjO,EAAQD,EAASU,GgB/tDhC,sBAAA0T,QAAA,CACA,GAAAjT,GAAAT,EAAA,IACA,SAAA2T,GACAA,EAAAC,GAAA/C,UAAA,SAAA/P,GACA,MAAAjB,MAAAgU,KAAA,WACA,GAAAC,GAAAH,EAAA9T,MACAqC,EAAAzB,EAAAqT,EAAA/Q,OACA+Q,GAAAC,KAAA,IACA7R,EAAA6K,QAAAlN,KAAAiB,OAGA4S,UhB0uDM,SAASnU,EAAQD,GiBrvDvBC,EAAAD,QAAAQ","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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) {\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 }\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 */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s); \n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if(prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)]; \n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2){\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t\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/***/ },\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 {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if(symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t 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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 7 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {}\n\t }//,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n\n/***/ },\n/* 8 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 10 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 11 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 12 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 13 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 14 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 451ee7af3112ff0efb83\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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) {\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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n 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\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s); \n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if(prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)]; \n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2){\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n 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 {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if(symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n 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 (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {}\n }//,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 8\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 13\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 2bd68fe17425d9e6b8b3","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","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","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","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\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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) {\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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t 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 var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\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 (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\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 2bd68fe17425d9e6b8b3\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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) {\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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n 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\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n 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 {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","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 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 var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\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\n **/","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 (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\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n '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\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 13\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 14\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 15\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 16\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/releasenotes.md b/releasenotes.md index 2dfe4b86..145b2471 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,7 @@ +### v1.11.0 + +- Add parallel component [#145](https://github.com/adrai/flowchart.js/pull/145) thanks to [sudhakar-sekar](https://github.com/sudhakar-sekar) + ### v1.9.0 - Add arrow-text attribute to symbols [#141](https://github.com/adrai/flowchart.js/pull/#141) thanks to [josephtocci](https://github.com/josephtocci) diff --git a/site b/site index 19ca6c57..58523775 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 19ca6c57d687c9a3e8f6dd7e5fd25fe12f0bd653 +Subproject commit 58523775d7da9ac496df531a092380180d7bd164 diff --git a/src/flowchart.defaults.js b/src/flowchart.defaults.js index 6c6bac61..f133ea94 100644 --- a/src/flowchart.defaults.js +++ b/src/flowchart.defaults.js @@ -19,13 +19,13 @@ module.exports = { 'class': 'flowchart', 'scale': 1, 'symbols': { - 'start': {}, - 'end': {}, - 'condition': {}, - 'inputoutput': {}, - 'operation': {}, - 'subroutine': {}, - 'parallel': {} + 'start': {}, + 'end': {}, + 'condition': {}, + 'inputoutput': {}, + 'operation': {}, + 'subroutine': {}, + 'parallel': {} } //, // 'flowstate' : { // 'past' : { 'fill': '#CCCCCC', 'font-size': 12}, diff --git a/src/flowchart.symbol.parallel.js b/src/flowchart.symbol.parallel.js index 54c1e5f1..90f8cf1c 100644 --- a/src/flowchart.symbol.parallel.js +++ b/src/flowchart.symbol.parallel.js @@ -1,7 +1,5 @@ var Symbol = require('./flowchart.symbol'); var inherits = require('./flowchart.helpers').inherits; -var drawAPI = require('./flowchart.functions'); -var drawPath = drawAPI.drawPath; function Parallel(chart, options) { var symbol = chart.paper.rect(0, 0, 0, 0); @@ -12,6 +10,16 @@ function Parallel(chart, options) { this.path2_direction = 'right'; this.path3_direction = 'top'; this.params = options.params; + if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) { + options[options.direction_next] = options.next; + } + if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) { + options[options.direction_next] = options.next; + } + if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) { + options[options.direction_next] = options.next; + } + if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) { if (options.direction_path1 === 'right') { this.path2_direction = 'bottom'; @@ -20,7 +28,11 @@ function Parallel(chart, options) { } else if (options.direction_path1 === 'top') { this.path2_direction = 'right'; this.path1_direction = 'top'; - this.path3_direction = 'top'; + this.path3_direction = 'bottom'; + } else if (options.direction_path1 === 'left') { + this.path2_direction = 'right'; + this.path1_direction = 'left'; + this.path3_direction = 'bottom'; } else { this.path2_direction = 'right'; this.path1_direction = 'bottom'; @@ -31,6 +43,10 @@ function Parallel(chart, options) { this.path1_direction = 'bottom'; this.path2_direction = 'right'; this.path3_direction = 'top'; + } else if (options.direction_path2 === 'left') { + this.path1_direction = 'bottom'; + this.path2_direction = 'left'; + this.path3_direction = 'right'; } else { this.path1_direction = 'right'; this.path2_direction = 'bottom'; @@ -41,15 +57,19 @@ function Parallel(chart, options) { this.path1_direction = 'bottom'; this.path2_direction = 'top'; this.path3_direction = 'right'; + } else if (options.direction_path2 === 'left') { + this.path1_direction = 'bottom'; + this.path2_direction = 'right'; + this.path3_direction = 'left'; } else { this.path1_direction = 'right'; this.path2_direction = 'bottom'; this.path3_direction = 'top'; } } else { - this.path1_direction = 'bottom'; - this.path2_direction = 'right'; - this.path3_direction = 'top'; + this.path1_direction = options.direction_path1; + this.path2_direction = options.direction_path2; + this.path3_direction = options.direction_path3; } this.path1_direction = this.path1_direction || 'bottom'; From 7e74665209e0af8ec6186610e4db557487091886 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Tue, 1 May 2018 11:29:03 +0200 Subject: [PATCH 049/117] updated site --- site | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site b/site index 58523775..4e5a855c 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 58523775d7da9ac496df531a092380180d7bd164 +Subproject commit 4e5a855c76c732624ff1bc3cdd4cc7cca86841a2 From 17fdaf9ac4ac2c50072c51df15e3590c7aa56f81 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Tue, 29 May 2018 09:21:23 +0200 Subject: [PATCH 050/117] fix direction issue for condition #151 --- package.json | 2 +- release/flowchart.js | 6 ++++-- release/flowchart.js.map | 2 +- release/flowchart.min.js | 4 ++-- release/flowchart.min.js.map | 2 +- releasenotes.md | 4 ++++ site | 2 +- src/flowchart.symbol.condition.js | 11 +++++++++++ 8 files changed, 25 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 8488742b..a071d1f6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.11.0", + "version": "1.11.1", "main": "./index", "private": false, "engines": { diff --git a/release/flowchart.js b/release/flowchart.js index c9a441c2..534e5df4 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,4 +1,4 @@ -// flowchart.js, v1.11.0 +// flowchart.js, v1.11.1 // Copyright (c)2018 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js @@ -679,7 +679,9 @@ options.yes && options.direction_yes && options.no && !options.direction_no ? "right" === options.direction_yes ? (this.no_direction = "bottom", this.yes_direction = "right") : "top" === options.direction_yes ? (this.no_direction = "right", this.yes_direction = "top") : (this.no_direction = "right", this.yes_direction = "bottom") : options.yes && !options.direction_yes && options.no && options.direction_no ? "right" === options.direction_no ? (this.yes_direction = "bottom", - this.no_direction = "right") : (this.yes_direction = "right", this.no_direction = "bottom") : (this.yes_direction = "bottom", + this.no_direction = "right") : (this.yes_direction = "right", this.no_direction = "bottom") : options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes ? "right" === options.direction_yes ? (this.no_direction = "bottom", + this.yes_direction = "right") : "top" === options.direction_yes ? (this.no_direction = "right", + this.yes_direction = "top") : (this.no_direction = "right", this.yes_direction = "bottom") : (this.yes_direction = "bottom", this.no_direction = "right"), this.yes_direction = this.yes_direction || "bottom", this.no_direction = this.no_direction || "right", this.text.attr({ x: 2 * this.textMargin diff --git a/release/flowchart.js.map b/release/flowchart.js.map index 450a30ec..cde6011e 100644 --- a/release/flowchart.js.map +++ b/release/flowchart.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 81c30d3c1c6c945a2358","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","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","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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) {\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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t 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 var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ },\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ },\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 81c30d3c1c6c945a2358\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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) {\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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n 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\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n 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 {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","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 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 var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\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\n **/","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 (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\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n '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\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 13\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 14\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 15\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 16\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 9f994aeb1c00ce0f3d07","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","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","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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) {\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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t 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 var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ },\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ },\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 9f994aeb1c00ce0f3d07\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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) {\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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n 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\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n this.params = options.params;\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","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 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 var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\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\n **/","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 (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\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n '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\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 13\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 14\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 15\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 16\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index ade3f053..f96e5f19 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,7 +1,7 @@ -// flowchart.js, v1.11.0 +// flowchart.js, v1.11.1 // Copyright (c)2018 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js -!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(9);var r=e(4);e(15);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),o=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var h=this.getAttr("maxWidth");if(h){for(var n=i.text.split(" "),a="",p=0,l=n.length;l>p;p++){var x=n[p];this.text.attr("text",a+" "+x),a+=this.text.getBBox().width>h?"\n"+x:" "+x}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var y=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*y,height:this.text.getBBox().height+2*y}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),o=s.drawLine,h=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function s(){for(var i,r=!1,o=0,h=e.chart.symbols.length;h>o;o++){i=e.chart.symbols[o];var n=Math.abs(i.getCenter().x-e.next.getCenter().x);if(i.getCenter().y>e.next.getCenter().y&&n<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),s())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,n=this.getCenter().y,a=this.getRight(),p=this.getBottom(),l=this.getTop(),x=this.getLeft(),y=t.getCenter().x,g=t.getCenter().y,c=t.getTop(),f=t.getRight(),d=t.getLeft(),m=s===y,u=n===g,b=g>n,_=n>g||this===t,v=s>y,w=y>s,k=0,B=this.getAttr("line-length"),A=this.getAttr("line-width");if(e&&"bottom"!==e||!m||!b)if(e&&"right"!==e||!u||!w)if(e&&"left"!==e||!u||!v)if(e&&"right"!==e||!m||!_)if(e&&"right"!==e||!m||!b)if(e&&"bottom"!==e||!v)if(e&&"bottom"!==e||!w)if(e&&"right"===e&&v)r=o(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else if(e&&"right"===e&&w)r=o(this.chart,a,[{x:c.x,y:a.y},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else if(e&&"bottom"===e&&m&&_)r=o(this.chart,p,[{x:p.x,y:p.y+B/2},{x:a.x+B/2,y:p.y+B/2},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.bottomStart=!0,t.topEnd=!0,k=p.x+B/2;else if("left"===e&&m&&_){var O=x.x-B/2;d.xL;L++)for(var X,T=this.chart.lines[L],S=T.attr("path"),Y=r.attr("path"),C=0,E=S.length-1;E>C;C++){var j=[];j.push(["M",S[C][1],S[C][2]]),j.push(["L",S[C+1][1],S[C+1][2]]);for(var P=j[0][1],z=j[0][2],R=j[1][1],F=j[1][2],I=0,N=Y.length-1;N>I;I++){var W=[];W.push(["M",Y[I][1],Y[I][2]]),W.push(["L",Y[I+1][1],Y[I+1][2]]);var V=W[0][1],q=W[0][2],G=W[1][1],Q=W[1][2],J=h(P,z,R,F,V,q,G,Q);if(J.onLine1&&J.onLine2){var $;q===Q?V>G?($=["L",J.x+2*A,q],Y.splice(I+1,0,$),$=["C",J.x+2*A,q,J.x,q-4*A,J.x-2*A,q],Y.splice(I+2,0,$),r.attr("path",Y)):($=["L",J.x-2*A,q],Y.splice(I+1,0,$),$=["C",J.x-2*A,q,J.x,q-4*A,J.x+2*A,q],Y.splice(I+2,0,$),r.attr("path",Y)):q>Q?($=["L",V,J.y+2*A],Y.splice(I+1,0,$),$=["C",V,J.y+2*A,V+4*A,J.y,V,J.y-2*A],Y.splice(I+2,0,$),r.attr("path",Y)):($=["L",V,J.y-2*A],Y.splice(I+1,0,$),$=["C",V,J.y-2*A,V+4*A,J.y,V,J.y+2*A],Y.splice(I+2,0,$),r.attr("path",Y)),I+=2,X+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,o="M{0},{1}";for(r=2,s=2*e.length+2;s>r;r+=2)o+=" L{"+r+"},{"+(r+1)+"}";var h=[i.x,i.y];for(r=0,s=e.length;s>r;r++)h.push(e[r].x),h.push(e[r].y);var n=t.paper.path(o,h);n.attr("stroke",t.options["element-color"]),n.attr("stroke-width",t.options["line-width"]);var a=t.options.font,p=t.options["font-family"],l=t.options["font-weight"];return a&&n.attr({font:a}),p&&n.attr({"font-family":p}),l&&n.attr({"font-weight":l}),n}function r(t,i,e,r){var s,o;"[object Array]"!==Object.prototype.toString.call(e)&&(e=[e]);var h="M{0},{1}";for(s=2,o=2*e.length+2;o>s;s+=2)h+=" L{"+s+"},{"+(s+1)+"}";var n=[i.x,i.y];for(s=0,o=e.length;o>s;s++)n.push(e[s].x),n.push(e[s].y);var a=t.paper.path(h,n);a.attr({stroke:t.options["line-color"],"stroke-width":t.options["line-width"],"arrow-end":t.options["arrow-end"]});var p=t.options.font,l=t.options["font-family"],x=t.options["font-weight"];if(p&&a.attr({font:p}),l&&a.attr({"font-family":l}),x&&a.attr({"font-weight":x}),r){var y=!1,g=t.paper.text(0,0,r),c=!1,f=e[0];i.y===f.y&&(c=!0);var d=0,m=0;y?(d=i.x>f.x?i.x-(i.x-f.x)/2:f.x-(f.x-i.x)/2,m=i.y>f.y?i.y-(i.y-f.y)/2:f.y-(f.y-i.y)/2,c?(d-=g.getBBox().width/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"],m-=g.getBBox().height/2)):(d=i.x,m=i.y,c?(d+=t.options["text-margin"]/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"]/2,m+=t.options["text-margin"],i.y>f.y&&(m-=2*t.options["text-margin"]))),g.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:d,y:m}),p&&g.attr({font:p}),l&&g.attr({"font-family":l}),x&&g.attr({"font-weight":x})}return a}function s(t,i,e,r,s,o,h,n){var a,p,l,x,y,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(n-o)*(e-t)-(h-s)*(r-i),0===a?g:(p=i-o,l=t-s,x=(h-s)*p-(n-o)*l,y=(e-t)*p-(r-i)*l,p=x/a,l=y/a,g.x=t+p*(e-t),g.y=i+p*(r-i),p>0&&1>p&&(g.onLine1=!0),l>0&&1>l&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function r(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?g.symbols[t.substring(0,i-1)]:g.symbols[t]}function y(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=j.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var g={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(y,t);break;case"end":g[t.key]=new h(y,t);break;case"operation":g[t.key]=new n(y,t);break;case"inputoutput":g[t.key]=new a(y,t);break;case"subroutine":g[t.key]=new p(y,t);break;case"condition":g[t.key]=new l(y,t);break;case"parallel":g[t.key]=new x(y,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var y=new s(t,i);this.diagram=y;var g={};!function c(t,i,s){var o=e(t);return r.start===t?y.startWith(o):i&&s&&!i.pathOk&&(i instanceof l?(s.yes===t&&i.yes(o),s.no===t&&i.no(o)):i instanceof x?(s.path1===t&&i.path1(o),s.path2===t&&i.path2(o),s.path3===t&&i.path3(o)):i.then(o)),o.pathOk?o:(o instanceof l?(t.yes&&c(t.yes,o,t),t.no&&c(t.no,o,t)):o instanceof x?(t.path1&&c(t.path1,o,t),t.path2&&c(t.path2,o,t),t.path3&&c(t.path3,o,t)):t.next&&c(t.next,o,t),o)}(this.start),y.render()},clean:function(){this.diagram.clean()}},c=[],f=0,d=1,m=t.length;m>d;d++)if("\n"===t[d]&&"\\"!==t[d-1]){var u=t.substring(f,d);f=d+1,c.push(u.replace(/\\\n/g,"\n"))}fb;){var v=c[b];v.indexOf("->")<0&&v.indexOf("=>")<0&&v.indexOf("@>")<0?(c[b-1]+="\n"+v,c.splice(b,1),_--):b++}for(;c.length>0;){var w=c.splice(0,1)[0].trim();if(w.indexOf("=>")>=0){var k=w.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var O=A[1].split(","),L=0;L=0&&(X=B.symbolType.split(": "),B.symbolType=X.shift(),B.text=X.join(": ")),B.text&&B.text.indexOf(":>")>=0?(X=B.text.split(":>"),B.text=X.shift(),B.link=X.join(":>")):B.symbolType.indexOf(":>")>=0&&(X=B.symbolType.split(":>"),B.symbolType=X.shift(),B.link=X.join(":>")),B.symbolType.indexOf("\n")>=0&&(B.symbolType=B.symbolType.split("\n")[0]),B.link){var T=B.link.indexOf("[")+1,S=B.link.indexOf("]");T>=0&&S>=0&&(B.target=B.link.substring(T,S),B.link=B.link.substring(0,T-1))}if(B.text&&B.text.indexOf("|")>=0){var Y=B.text.split("|");B.flowstate=Y.pop().trim(),B.text=Y.join("|")}g.symbols[B.key]=B}else if(w.indexOf("->")>=0)for(var C=w.split("->"),L=0,E=C.length;E>L;L++){var j=C[L],P=e(j);("true"===P||"false"===P)&&(j=j.replace("true","yes"),j=j.replace("false","no"));var z=r(j),R=y(j),F=null;if(R.indexOf(",")>=0){var I=R.split(",");R=I[0],F=I[1].trim()}if(g.start||(g.start=z),E>L+1){var N=C[L+1];z[R]=r(N),z["direction_"+R]=F,F=null}}else if(w.indexOf("@>")>=0)for(var W=w.split("@>"),L=0,E=W.length;E>L;L++)if(L+1!=E){var V=r(W[L]),N=r(W[L+1]);V.lineStyle[N.key]=JSON.parse(i(W[L+1]))}}return g}var s=e(7),o=e(13),h=e(10),n=e(12),a=e(11),p=e(14),l=e(5),x=e(6);t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.yes_direction="bottom",this.no_direction="right",this.params=i.params,i.yes&&i.direction_yes&&i.no&&!i.direction_no?"right"===i.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):"top"===i.direction_yes?(this.no_direction="right",this.yes_direction="top"):(this.no_direction="right",this.yes_direction="bottom"):i.yes&&!i.direction_yes&&i.no&&i.direction_no?"right"===i.direction_no?(this.yes_direction="bottom",this.no_direction="right"):(this.yes_direction="right",this.no_direction="bottom"):(this.yes_direction="bottom",this.no_direction="right"),this.yes_direction=this.yes_direction||"bottom",this.no_direction=this.no_direction||"right",this.text.attr({x:2*this.textMargin});var e=this.text.getBBox().width+3*this.textMargin;e+=e/2;var r=this.text.getBBox().height+2*this.textMargin;r+=r/2,r=Math.max(.5*e,r);var o=e/4,h=r/4;this.text.attr({x:o+this.textMargin/2});var a={x:o,y:h},p=[{x:o-e/4,y:h+r/4},{x:o-e/4+e/2,y:h+r/4+r/2},{x:o-e/4+e,y:h+r/4},{x:o-e/4+e/2,y:h+r/4-r/2},{x:o-e/4,y:h+r/4}],l=n(t,a,p);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,h=e(3),n=h.drawPath;o(r,s),r.prototype.render=function(){this.yes_direction&&(this[this.yes_direction+"_symbol"]=this.yes_symbol),this.no_direction&&(this[this.no_direction+"_symbol"]=this.no_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.right_symbol){var e=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(e.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var r=this;!function s(){for(var i,e=!1,o=0,h=r.chart.symbols.length;h>o;o++)if(i=r.chart.symbols[o],!r.params["align-next"]||"no"!==r.params["align-next"]){var n=Math.abs(i.getCenter().x-r.right_symbol.getCenter().x);if(i.getCenter().y>r.right_symbol.getCenter().y&&n<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),s())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),this.textMargin=this.getAttr("text-margin"),this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top",this.params=i.params,"path1"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path2"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path3"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),i.path1&&i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path1?(this.path2_direction="bottom",this.path1_direction="right",this.path3_direction="top"):"top"===i.direction_path1?(this.path2_direction="right",this.path1_direction="top",this.path3_direction="bottom"):"left"===i.direction_path1?(this.path2_direction="right",this.path1_direction="left",this.path3_direction="bottom"):(this.path2_direction="right",this.path1_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="left",this.path3_direction="right"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="top",this.path3_direction="right"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="left"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):(this.path1_direction=i.direction_path1,this.path2_direction=i.direction_path2,this.path3_direction=i.direction_path3),this.path1_direction=this.path1_direction||"bottom",this.path2_direction=this.path2_direction||"right",this.path3_direction=this.path3_direction||"top",this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),r.prototype.render=function(){this.path1_direction&&(this[this.path1_direction+"_symbol"]=this.path1_symbol),this.path2_direction&&(this[this.path2_direction+"_symbol"]=this.path2_symbol),this.path3_direction&&(this[this.path3_direction+"_symbol"]=this.path3_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.top_symbol){var e=this.getTop();this.top_symbol.isPositioned||(this.top_symbol.shiftY(this.getY()-this.top_symbol.height-t),this.top_symbol.setX(e.x+this.top_symbol.width),this.top_symbol.isPositioned=!0,this.top_symbol.render())}if(this.right_symbol){var r=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(r.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var s=this;!function o(){for(var i,e=!1,r=0,h=s.chart.symbols.length;h>r;r++)if(i=s.chart.symbols[r],!s.params["align-next"]||"no"!==s.params["align-next"]){var n=Math.abs(i.getCenter().x-s.right_symbol.getCenter().x);if(i.getCenter().y>s.right_symbol.getCenter().y&&n<=s.right_symbol.width/2){e=!0;break}}e&&(s.right_symbol.setX(i.getX()+i.width+t),o())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.path1_symbol&&this.drawLineTo(this.path1_symbol,"",this.path1_direction),this.path2_symbol&&this.drawLineTo(this.path2_symbol,"",this.path2_direction),this.path3_symbol&&this.drawLineTo(this.path3_symbol,"",this.path3_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=o(i,h),this.symbols=[],this.lines=[],this.start=null}var s=e(16),o=e(1).defaults,h=e(8),n=e(5),a=e(6);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof n?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t instanceof a?(t.path1=function(e){return t.path1_symbol=e,t.path2_symbol&&(t.pathOk=!0),i.handle(e)},t.path2=function(e){return t.path2_symbol=e,t.path3_symbol&&(t.pathOk=!0),i.handle(e)},t.path3=function(e){return t.path3_symbol=e,t.path1_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,o=0,h=0,n=0,a=0,p=0;for(s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],t.width>e&&(e=t.width),t.height>r&&(r=t.height);for(s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],t.shiftX(this.options.x+(e-t.width)/2+this.options["line-width"]),t.shiftY(this.options.y+(r-t.height)/2+this.options["line-width"]);for(this.start.render(),s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],t.renderLines();h=this.maxXFromLine;var l,x;for(s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],l=t.getX()+t.width,x=t.getY()+t.height,l>h&&(h=l),x>n&&(n=x);for(s=0,o=this.lines.length;o>s;s++){i=this.lines[s].getBBox(),l=i.x,x=i.y;var y=i.x2,g=i.y2;a>l&&(a=l),p>x&&(p=x),y>h&&(h=y),g>n&&(n=g)}var c=this.options.scale,f=this.options["line-width"];0>a&&(a-=f),0>p&&(p-=f);var d=h+f-a,m=n+f-p;this.paper.setSize(d*c,m*c),this.paper.setViewBox(a,p,d,m,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{},parallel:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);e>s;s++)if(s in i&&i[s]===t)return s;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,h=r/2,a={x:o,y:h},p=[{x:o-this.textMargin,y:r},{x:o-this.textMargin+e,y:r},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:h}],l=n(t,a,p);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,h=e(3),n=h.drawPath;o(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var o=this.getAttr("font"),h=this.getAttr("font-family"),n=this.getAttr("font-weight");o&&r.attr({font:o}),h&&r.attr({"font-family":h}),n&&r.attr({"font-weight":n}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); +!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var o=e[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,i),o.loaded=!0,o.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(9);var r=e(4);e(15);var o={parse:r};"undefined"!=typeof window&&(window.flowchart=o),t.exports=o},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var o in i)r[o]=i[o];for(o in t)t[o]&&("object"==typeof r[o]?r[o]=e(r[o],t[o]):r[o]=t[o]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),o=this.getAttr("font-family"),s=this.getAttr("font-weight");r&&this.text.attr({font:r}),o&&this.text.attr({"font-family":o}),s&&this.text.attr({"font-weight":s}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var h=this.getAttr("maxWidth");if(h){for(var n=i.text.split(" "),a="",p=0,l=n.length;l>p;p++){var x=n[p];this.text.attr("text",a+" "+x),a+=this.text.getBBox().width>h?"\n"+x:" "+x}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var y=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*y,height:this.text.getBBox().height+2*y}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var o=e(3),s=o.drawLine,h=o.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function o(){for(var i,r=!1,s=0,h=e.chart.symbols.length;h>s;s++){i=e.chart.symbols[s];var n=Math.abs(i.getCenter().x-e.next.getCenter().x);if(i.getCenter().y>e.next.getCenter().y&&n<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),o())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,o=this.getCenter().x,n=this.getCenter().y,a=this.getRight(),p=this.getBottom(),l=this.getTop(),x=this.getLeft(),y=t.getCenter().x,g=t.getCenter().y,c=t.getTop(),f=t.getRight(),d=t.getLeft(),m=o===y,u=n===g,b=g>n,_=n>g||this===t,v=o>y,w=y>o,k=0,B=this.getAttr("line-length"),A=this.getAttr("line-width");if(e&&"bottom"!==e||!m||!b)if(e&&"right"!==e||!u||!w)if(e&&"left"!==e||!u||!v)if(e&&"right"!==e||!m||!_)if(e&&"right"!==e||!m||!b)if(e&&"bottom"!==e||!v)if(e&&"bottom"!==e||!w)if(e&&"right"===e&&v)r=s(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else if(e&&"right"===e&&w)r=s(this.chart,a,[{x:c.x,y:a.y},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else if(e&&"bottom"===e&&m&&_)r=s(this.chart,p,[{x:p.x,y:p.y+B/2},{x:a.x+B/2,y:p.y+B/2},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.bottomStart=!0,t.topEnd=!0,k=p.x+B/2;else if("left"===e&&m&&_){var O=x.x-B/2;d.xL;L++)for(var X,T=this.chart.lines[L],S=T.attr("path"),Y=r.attr("path"),C=0,E=S.length-1;E>C;C++){var j=[];j.push(["M",S[C][1],S[C][2]]),j.push(["L",S[C+1][1],S[C+1][2]]);for(var P=j[0][1],z=j[0][2],R=j[1][1],F=j[1][2],I=0,N=Y.length-1;N>I;I++){var W=[];W.push(["M",Y[I][1],Y[I][2]]),W.push(["L",Y[I+1][1],Y[I+1][2]]);var V=W[0][1],q=W[0][2],G=W[1][1],Q=W[1][2],J=h(P,z,R,F,V,q,G,Q);if(J.onLine1&&J.onLine2){var $;q===Q?V>G?($=["L",J.x+2*A,q],Y.splice(I+1,0,$),$=["C",J.x+2*A,q,J.x,q-4*A,J.x-2*A,q],Y.splice(I+2,0,$),r.attr("path",Y)):($=["L",J.x-2*A,q],Y.splice(I+1,0,$),$=["C",J.x-2*A,q,J.x,q-4*A,J.x+2*A,q],Y.splice(I+2,0,$),r.attr("path",Y)):q>Q?($=["L",V,J.y+2*A],Y.splice(I+1,0,$),$=["C",V,J.y+2*A,V+4*A,J.y,V,J.y-2*A],Y.splice(I+2,0,$),r.attr("path",Y)):($=["L",V,J.y-2*A],Y.splice(I+1,0,$),$=["C",V,J.y-2*A,V+4*A,J.y,V,J.y+2*A],Y.splice(I+2,0,$),r.attr("path",Y)),I+=2,X+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,o,s="M{0},{1}";for(r=2,o=2*e.length+2;o>r;r+=2)s+=" L{"+r+"},{"+(r+1)+"}";var h=[i.x,i.y];for(r=0,o=e.length;o>r;r++)h.push(e[r].x),h.push(e[r].y);var n=t.paper.path(s,h);n.attr("stroke",t.options["element-color"]),n.attr("stroke-width",t.options["line-width"]);var a=t.options.font,p=t.options["font-family"],l=t.options["font-weight"];return a&&n.attr({font:a}),p&&n.attr({"font-family":p}),l&&n.attr({"font-weight":l}),n}function r(t,i,e,r){var o,s;"[object Array]"!==Object.prototype.toString.call(e)&&(e=[e]);var h="M{0},{1}";for(o=2,s=2*e.length+2;s>o;o+=2)h+=" L{"+o+"},{"+(o+1)+"}";var n=[i.x,i.y];for(o=0,s=e.length;s>o;o++)n.push(e[o].x),n.push(e[o].y);var a=t.paper.path(h,n);a.attr({stroke:t.options["line-color"],"stroke-width":t.options["line-width"],"arrow-end":t.options["arrow-end"]});var p=t.options.font,l=t.options["font-family"],x=t.options["font-weight"];if(p&&a.attr({font:p}),l&&a.attr({"font-family":l}),x&&a.attr({"font-weight":x}),r){var y=!1,g=t.paper.text(0,0,r),c=!1,f=e[0];i.y===f.y&&(c=!0);var d=0,m=0;y?(d=i.x>f.x?i.x-(i.x-f.x)/2:f.x-(f.x-i.x)/2,m=i.y>f.y?i.y-(i.y-f.y)/2:f.y-(f.y-i.y)/2,c?(d-=g.getBBox().width/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"],m-=g.getBBox().height/2)):(d=i.x,m=i.y,c?(d+=t.options["text-margin"]/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"]/2,m+=t.options["text-margin"],i.y>f.y&&(m-=2*t.options["text-margin"]))),g.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:d,y:m}),p&&g.attr({font:p}),l&&g.attr({"font-family":l}),x&&g.attr({"font-weight":x})}return a}function o(t,i,e,r,o,s,h,n){var a,p,l,x,y,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(n-s)*(e-t)-(h-o)*(r-i),0===a?g:(p=i-s,l=t-o,x=(h-o)*p-(n-s)*l,y=(e-t)*p-(r-i)*l,p=x/a,l=y/a,g.x=t+p*(e-t),g.y=i+p*(r-i),p>0&&1>p&&(g.onLine1=!0),l>0&&1>l&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:o}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function r(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?g.symbols[t.substring(0,i-1)]:g.symbols[t]}function y(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=j.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var g={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new s(y,t);break;case"end":g[t.key]=new h(y,t);break;case"operation":g[t.key]=new n(y,t);break;case"inputoutput":g[t.key]=new a(y,t);break;case"subroutine":g[t.key]=new p(y,t);break;case"condition":g[t.key]=new l(y,t);break;case"parallel":g[t.key]=new x(y,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var y=new o(t,i);this.diagram=y;var g={};!function c(t,i,o){var s=e(t);return r.start===t?y.startWith(s):i&&o&&!i.pathOk&&(i instanceof l?(o.yes===t&&i.yes(s),o.no===t&&i.no(s)):i instanceof x?(o.path1===t&&i.path1(s),o.path2===t&&i.path2(s),o.path3===t&&i.path3(s)):i.then(s)),s.pathOk?s:(s instanceof l?(t.yes&&c(t.yes,s,t),t.no&&c(t.no,s,t)):s instanceof x?(t.path1&&c(t.path1,s,t),t.path2&&c(t.path2,s,t),t.path3&&c(t.path3,s,t)):t.next&&c(t.next,s,t),s)}(this.start),y.render()},clean:function(){this.diagram.clean()}},c=[],f=0,d=1,m=t.length;m>d;d++)if("\n"===t[d]&&"\\"!==t[d-1]){var u=t.substring(f,d);f=d+1,c.push(u.replace(/\\\n/g,"\n"))}fb;){var v=c[b];v.indexOf("->")<0&&v.indexOf("=>")<0&&v.indexOf("@>")<0?(c[b-1]+="\n"+v,c.splice(b,1),_--):b++}for(;c.length>0;){var w=c.splice(0,1)[0].trim();if(w.indexOf("=>")>=0){var k=w.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var O=A[1].split(","),L=0;L=0&&(X=B.symbolType.split(": "),B.symbolType=X.shift(),B.text=X.join(": ")),B.text&&B.text.indexOf(":>")>=0?(X=B.text.split(":>"),B.text=X.shift(),B.link=X.join(":>")):B.symbolType.indexOf(":>")>=0&&(X=B.symbolType.split(":>"),B.symbolType=X.shift(),B.link=X.join(":>")),B.symbolType.indexOf("\n")>=0&&(B.symbolType=B.symbolType.split("\n")[0]),B.link){var T=B.link.indexOf("[")+1,S=B.link.indexOf("]");T>=0&&S>=0&&(B.target=B.link.substring(T,S),B.link=B.link.substring(0,T-1))}if(B.text&&B.text.indexOf("|")>=0){var Y=B.text.split("|");B.flowstate=Y.pop().trim(),B.text=Y.join("|")}g.symbols[B.key]=B}else if(w.indexOf("->")>=0)for(var C=w.split("->"),L=0,E=C.length;E>L;L++){var j=C[L],P=e(j);("true"===P||"false"===P)&&(j=j.replace("true","yes"),j=j.replace("false","no"));var z=r(j),R=y(j),F=null;if(R.indexOf(",")>=0){var I=R.split(",");R=I[0],F=I[1].trim()}if(g.start||(g.start=z),E>L+1){var N=C[L+1];z[R]=r(N),z["direction_"+R]=F,F=null}}else if(w.indexOf("@>")>=0)for(var W=w.split("@>"),L=0,E=W.length;E>L;L++)if(L+1!=E){var V=r(W[L]),N=r(W[L+1]);V.lineStyle[N.key]=JSON.parse(i(W[L+1]))}}return g}var o=e(7),s=e(13),h=e(10),n=e(12),a=e(11),p=e(14),l=e(5),x=e(6);t.exports=r},function(t,i,e){function r(t,i){i=i||{},o.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.yes_direction="bottom",this.no_direction="right",this.params=i.params,i.yes&&i.direction_yes&&i.no&&!i.direction_no?"right"===i.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):"top"===i.direction_yes?(this.no_direction="right",this.yes_direction="top"):(this.no_direction="right",this.yes_direction="bottom"):i.yes&&!i.direction_yes&&i.no&&i.direction_no?"right"===i.direction_no?(this.yes_direction="bottom",this.no_direction="right"):(this.yes_direction="right",this.no_direction="bottom"):i.yes&&i.direction_yes&&i.no&&i.direction_no&&i.direction_no!==i.direction_yes?"right"===i.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):"top"===i.direction_yes?(this.no_direction="right",this.yes_direction="top"):(this.no_direction="right",this.yes_direction="bottom"):(this.yes_direction="bottom",this.no_direction="right"),this.yes_direction=this.yes_direction||"bottom",this.no_direction=this.no_direction||"right",this.text.attr({x:2*this.textMargin});var e=this.text.getBBox().width+3*this.textMargin;e+=e/2;var r=this.text.getBBox().height+2*this.textMargin;r+=r/2,r=Math.max(.5*e,r);var s=e/4,h=r/4;this.text.attr({x:s+this.textMargin/2});var a={x:s,y:h},p=[{x:s-e/4,y:h+r/4},{x:s-e/4+e/2,y:h+r/4+r/2},{x:s-e/4+e,y:h+r/4},{x:s-e/4+e/2,y:h+r/4-r/2},{x:s-e/4,y:h+r/4}],l=n(t,a,p);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var o=e(2),s=e(1).inherits,h=e(3),n=h.drawPath;s(r,o),r.prototype.render=function(){this.yes_direction&&(this[this.yes_direction+"_symbol"]=this.yes_symbol),this.no_direction&&(this[this.no_direction+"_symbol"]=this.no_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.right_symbol){var e=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(e.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var r=this;!function o(){for(var i,e=!1,s=0,h=r.chart.symbols.length;h>s;s++)if(i=r.chart.symbols[s],!r.params["align-next"]||"no"!==r.params["align-next"]){var n=Math.abs(i.getCenter().x-r.right_symbol.getCenter().x);if(i.getCenter().y>r.right_symbol.getCenter().y&&n<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),o())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},o.call(this,t,i,e),this.textMargin=this.getAttr("text-margin"),this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top",this.params=i.params,"path1"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path2"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path3"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),i.path1&&i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path1?(this.path2_direction="bottom",this.path1_direction="right",this.path3_direction="top"):"top"===i.direction_path1?(this.path2_direction="right",this.path1_direction="top",this.path3_direction="bottom"):"left"===i.direction_path1?(this.path2_direction="right",this.path1_direction="left",this.path3_direction="bottom"):(this.path2_direction="right",this.path1_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="left",this.path3_direction="right"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="top",this.path3_direction="right"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="left"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):(this.path1_direction=i.direction_path1,this.path2_direction=i.direction_path2,this.path3_direction=i.direction_path3),this.path1_direction=this.path1_direction||"bottom",this.path2_direction=this.path2_direction||"right",this.path3_direction=this.path3_direction||"top",this.initialize()}var o=e(2),s=e(1).inherits;s(r,o),r.prototype.render=function(){this.path1_direction&&(this[this.path1_direction+"_symbol"]=this.path1_symbol),this.path2_direction&&(this[this.path2_direction+"_symbol"]=this.path2_symbol),this.path3_direction&&(this[this.path3_direction+"_symbol"]=this.path3_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.top_symbol){var e=this.getTop();this.top_symbol.isPositioned||(this.top_symbol.shiftY(this.getY()-this.top_symbol.height-t),this.top_symbol.setX(e.x+this.top_symbol.width),this.top_symbol.isPositioned=!0,this.top_symbol.render())}if(this.right_symbol){var r=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(r.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var o=this;!function s(){for(var i,e=!1,r=0,h=o.chart.symbols.length;h>r;r++)if(i=o.chart.symbols[r],!o.params["align-next"]||"no"!==o.params["align-next"]){var n=Math.abs(i.getCenter().x-o.right_symbol.getCenter().x);if(i.getCenter().y>o.right_symbol.getCenter().y&&n<=o.right_symbol.width/2){e=!0;break}}e&&(o.right_symbol.setX(i.getX()+i.width+t),s())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.path1_symbol&&this.drawLineTo(this.path1_symbol,"",this.path1_direction),this.path2_symbol&&this.drawLineTo(this.path2_symbol,"",this.path2_direction),this.path3_symbol&&this.drawLineTo(this.path3_symbol,"",this.path3_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new o(t),this.options=s(i,h),this.symbols=[],this.lines=[],this.start=null}var o=e(16),s=e(1).defaults,h=e(8),n=e(5),a=e(6);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof n?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t instanceof a?(t.path1=function(e){return t.path1_symbol=e,t.path2_symbol&&(t.pathOk=!0),i.handle(e)},t.path2=function(e){return t.path2_symbol=e,t.path3_symbol&&(t.pathOk=!0),i.handle(e)},t.path3=function(e){return t.path3_symbol=e,t.path1_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,o=0,s=0,h=0,n=0,a=0,p=0;for(o=0,s=this.symbols.length;s>o;o++)t=this.symbols[o],t.width>e&&(e=t.width),t.height>r&&(r=t.height);for(o=0,s=this.symbols.length;s>o;o++)t=this.symbols[o],t.shiftX(this.options.x+(e-t.width)/2+this.options["line-width"]),t.shiftY(this.options.y+(r-t.height)/2+this.options["line-width"]);for(this.start.render(),o=0,s=this.symbols.length;s>o;o++)t=this.symbols[o],t.renderLines();h=this.maxXFromLine;var l,x;for(o=0,s=this.symbols.length;s>o;o++)t=this.symbols[o],l=t.getX()+t.width,x=t.getY()+t.height,l>h&&(h=l),x>n&&(n=x);for(o=0,s=this.lines.length;s>o;o++){i=this.lines[o].getBBox(),l=i.x,x=i.y;var y=i.x2,g=i.y2;a>l&&(a=l),p>x&&(p=x),y>h&&(h=y),g>n&&(n=g)}var c=this.options.scale,f=this.options["line-width"];0>a&&(a-=f),0>p&&(p-=f);var d=h+f-a,m=n+f-p;this.paper.setSize(d*c,m*c),this.paper.setViewBox(a,p,d,m,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{},parallel:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var o=r>=0?r:Math.max(e-Math.abs(r),0);e>o;o++)if(o in i&&i[o]===t)return o;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var o=r>=0?Math.min(r,e-1):e-Math.abs(r);o>=0;o--)if(o in i&&i[o]===t)return o;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",o.call(this,t,i,e)}var o=e(2),s=e(1).inherits;s(r,o),t.exports=r},function(t,i,e){function r(t,i){i=i||{},o.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,s=this.textMargin,h=r/2,a={x:s,y:h},p=[{x:s-this.textMargin,y:r},{x:s-this.textMargin+e,y:r},{x:s-this.textMargin+e+2*this.textMargin,y:0},{x:s-this.textMargin+2*this.textMargin,y:0},{x:s,y:h}],l=n(t,a,p);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var o=e(2),s=e(1).inherits,h=e(3),n=h.drawPath;s(r,o),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},o.call(this,t,i,e)}var o=e(2),s=e(1).inherits;s(r,o),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",o.call(this,t,i,e)}var o=e(2),s=e(1).inherits;s(r,o),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},o.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var s=this.getAttr("font"),h=this.getAttr("font-family"),n=this.getAttr("font-weight");s&&r.attr({font:s}),h&&r.attr({"font-family":h}),n&&r.attr({"font-weight":n}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var o=e(2),s=e(1).inherits;s(r,o),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),o=r(e.text());e.html(""),o.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); //# sourceMappingURL=flowchart.min.js.map \ No newline at end of file diff --git a/release/flowchart.min.js.map b/release/flowchart.min.js.map index 886ebae6..f65c2aee 100644 --- a/release/flowchart.min.js.map +++ b/release/flowchart.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 2bd68fe17425d9e6b8b3","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","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","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","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\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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) {\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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t 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 var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\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 (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\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 2bd68fe17425d9e6b8b3\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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) {\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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n 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\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n 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 {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","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 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 var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\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\n **/","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 (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\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n '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\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 13\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 14\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 15\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 16\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 391a1f56afcd8d86a177","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","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","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","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\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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) {\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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t 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 var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\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 (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\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 391a1f56afcd8d86a177\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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) {\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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n 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\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n this.params = options.params;\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","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 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 var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\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\n **/","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 (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\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n '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\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 13\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 14\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 15\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 16\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/releasenotes.md b/releasenotes.md index 145b2471..ec635c48 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,7 @@ +### v1.11.1 + +- fix direction issue for condition [#151](https://github.com/adrai/flowchart.js/issues/151) + ### v1.11.0 - Add parallel component [#145](https://github.com/adrai/flowchart.js/pull/145) thanks to [sudhakar-sekar](https://github.com/sudhakar-sekar) diff --git a/site b/site index 4e5a855c..fe48159f 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 4e5a855c76c732624ff1bc3cdd4cc7cca86841a2 +Subproject commit fe48159fc1889a8e470fe1a73eb9af3317110ebb diff --git a/src/flowchart.symbol.condition.js b/src/flowchart.symbol.condition.js index b970a5bf..380eb20b 100644 --- a/src/flowchart.symbol.condition.js +++ b/src/flowchart.symbol.condition.js @@ -29,6 +29,17 @@ function Condition(chart, options) { this.yes_direction = 'right'; this.no_direction = 'bottom'; } + } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) { + if (options.direction_yes === 'right') { + this.no_direction = 'bottom'; + this.yes_direction = 'right'; + } else if (options.direction_yes === 'top') { + this.no_direction = 'right'; + this.yes_direction = 'top'; + } else { + this.no_direction = 'right'; + this.yes_direction = 'bottom'; + } } else { this.yes_direction = 'bottom'; this.no_direction = 'right'; From 20b7c4ba64859899e02340932240932d46c64bee Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Sat, 2 Jun 2018 16:19:48 +0200 Subject: [PATCH 051/117] try to optimize left handling [#152] --- package.json | 2 +- release/flowchart.js | 160 +++++++++++++++++++------------ release/flowchart.js.map | 2 +- release/flowchart.min.js | 4 +- release/flowchart.min.js.map | 2 +- releasenotes.md | 4 + site | 2 +- src/flowchart.chart.js | 2 + src/flowchart.symbol.js | 49 +++++++++- src/flowchart.symbol.parallel.js | 37 ++++++- 10 files changed, 191 insertions(+), 73 deletions(-) diff --git a/package.json b/package.json index a071d1f6..c0cb3187 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.11.1", + "version": "1.11.2", "main": "./index", "private": false, "engines": { diff --git a/release/flowchart.js b/release/flowchart.js index 534e5df4..0ce34e41 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,4 +1,4 @@ -// flowchart.js, v1.11.1 +// flowchart.js, v1.11.2 // Copyright (c)2018 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js @@ -149,7 +149,7 @@ }), options.link && this.text.attr("href", options.link), options.target && this.text.attr("target", options.target); var maxWidth = this.getAttr("maxWidth"); if (maxWidth) { - for (var words = options.text.split(" "), tempText = "", i = 0, ii = words.length; ii > i; i++) { + for (var words = options.text.split(" "), tempText = "", i = 0, ii = words.length; i < ii; i++) { var word = words[i]; this.text.attr("text", tempText + " " + word), tempText += this.text.getBBox().width > maxWidth ? "\n" + word : " " + word; } @@ -224,24 +224,35 @@ }; }, Symbol.prototype.render = function() { if (this.next) { - var lineLength = this.getAttr("line-length"); + var self = this, lineLength = this.getAttr("line-length"); if ("right" === this.next_direction) { var rightPoint = this.getRight(); - if (!this.next.isPositioned) { - this.next.setY(rightPoint.y - this.next.height / 2), this.next.shiftX(this.group.getBBox().x + this.width + lineLength); - var self = this; - !function shift() { - for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; len > i; i++) { - symb = self.chart.symbols[i]; - var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x); - if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width / 2) { - hasSymbolUnder = !0; - break; - } + this.next.isPositioned || (this.next.setY(rightPoint.y - this.next.height / 2), + this.next.shiftX(this.group.getBBox().x + this.width + lineLength), function shift() { + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) { + symb = self.chart.symbols[i]; + var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x); + if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width / 2) { + hasSymbolUnder = !0; + break; } - hasSymbolUnder && (self.next.setX(symb.getX() + symb.width + lineLength), shift()); - }(), this.next.isPositioned = !0, this.next.render(); - } + } + hasSymbolUnder && (self.next.setX(symb.getX() + symb.width + lineLength), shift()); + }(), this.next.isPositioned = !0, this.next.render()); + } else if ("left" === this.next_direction) { + var leftPoint = this.getLeft(); + this.next.isPositioned || (this.next.setY(leftPoint.y - this.next.height / 2), this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength)), + function shift() { + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) { + symb = self.chart.symbols[i]; + var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x); + if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width / 2) { + hasSymbolUnder = !0; + break; + } + } + hasSymbolUnder && (self.next.setX(symb.getX() + symb.width + lineLength), shift()); + }(), this.next.isPositioned = !0, this.next.render()); } else { var bottomPoint = this.getBottom(); this.next.isPositioned || (this.next.shiftY(this.getY() + this.height + lineLength), @@ -253,8 +264,8 @@ this.next && (this.next_direction ? this.drawLineTo(this.next, this.getAttr("arrow-text") || "", this.next_direction) : this.drawLineTo(this.next, this.getAttr("arrow-text") || "")); }, Symbol.prototype.drawLineTo = function(symbol, text, origin) { this.connectedTo.indexOf(symbol) < 0 && this.connectedTo.push(symbol); - var line, x = this.getCenter().x, y = this.getCenter().y, right = this.getRight(), bottom = this.getBottom(), top = this.getTop(), left = this.getLeft(), symbolX = symbol.getCenter().x, symbolY = symbol.getCenter().y, symbolTop = symbol.getTop(), symbolRight = symbol.getRight(), symbolLeft = symbol.getLeft(), isOnSameColumn = x === symbolX, isOnSameLine = y === symbolY, isUnder = symbolY > y, isUpper = y > symbolY || this === symbol, isLeft = x > symbolX, isRight = symbolX > x, maxX = 0, lineLength = this.getAttr("line-length"), lineWith = this.getAttr("line-width"); - if (origin && "bottom" !== origin || !isOnSameColumn || !isUnder) if (origin && "right" !== origin || !isOnSameLine || !isRight) if (origin && "left" !== origin || !isOnSameLine || !isLeft) if (origin && "right" !== origin || !isOnSameColumn || !isUpper) if (origin && "right" !== origin || !isOnSameColumn || !isUnder) if (origin && "bottom" !== origin || !isLeft) if (origin && "bottom" !== origin || !isRight) if (origin && "right" === origin && isLeft) line = drawLine(this.chart, right, [ { + var line, x = this.getCenter().x, y = this.getCenter().y, right = this.getRight(), bottom = this.getBottom(), top = this.getTop(), left = this.getLeft(), symbolX = symbol.getCenter().x, symbolY = symbol.getCenter().y, symbolTop = symbol.getTop(), symbolRight = symbol.getRight(), symbolLeft = symbol.getLeft(), isOnSameColumn = x === symbolX, isOnSameLine = y === symbolY, isUnder = y < symbolY, isUpper = y > symbolY || this === symbol, isLeft = x > symbolX, isRight = x < symbolX, maxX = 0, lineLength = this.getAttr("line-length"), lineWith = this.getAttr("line-width"); + if (origin && "bottom" !== origin || !isOnSameColumn || !isUnder) if (origin && "right" !== origin || !isOnSameLine || !isRight) if (origin && "left" !== origin || !isOnSameLine || !isLeft) if (origin && "right" !== origin || !isOnSameColumn || !isUpper) if (origin && "right" !== origin || !isOnSameColumn || !isUnder) if (origin && "bottom" !== origin || !isLeft) if (origin && "bottom" !== origin || !isRight || !isUnder) if (origin && "bottom" !== origin || !isRight) if (origin && "right" === origin && isLeft) line = drawLine(this.chart, right, [ { x: right.x + lineLength / 2, y: right.y }, { @@ -338,7 +349,16 @@ }, { x: symbolTop.x, y: symbolTop.y - } ], text), this.bottomStart = !0, symbol.topEnd = !0, maxX = bottom.x + (bottom.x - symbolTop.x) / 2; else line = this.leftEnd && isUpper ? drawLine(this.chart, bottom, [ { + } ], text), this.bottomStart = !0, symbol.topEnd = !0, maxX = bottom.x + (bottom.x - symbolTop.x) / 2; else line = drawLine(this.chart, bottom, [ { + x: bottom.x, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y - lineLength / 2 + }, { + x: symbolTop.x, + y: symbolTop.y + } ], text), this.bottomStart = !0, symbol.topEnd = !0, maxX = bottom.x, symbolTop.x > maxX && (maxX = symbolTop.x); else line = this.leftEnd && isUpper ? drawLine(this.chart, bottom, [ { x: bottom.x, y: bottom.y + lineLength / 2 }, { @@ -392,10 +412,10 @@ this.bottomStart = !0, symbol.topEnd = !0, maxX = bottom.x; if (//update line style this.lineStyle[symbol.key] && line && line.attr(this.lineStyle[symbol.key]), line) { - for (var l = 0, llen = this.chart.lines.length; llen > l; l++) for (var len, otherLine = this.chart.lines[l], ePath = otherLine.attr("path"), lPath = line.attr("path"), iP = 0, lenP = ePath.length - 1; lenP > iP; iP++) { + for (var l = 0, llen = this.chart.lines.length; l < llen; l++) for (var len, otherLine = this.chart.lines[l], ePath = otherLine.attr("path"), lPath = line.attr("path"), iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) { var newPath = []; newPath.push([ "M", ePath[iP][1], ePath[iP][2] ]), newPath.push([ "L", ePath[iP + 1][1], ePath[iP + 1][2] ]); - for (var line1_from_x = newPath[0][1], line1_from_y = newPath[0][2], line1_to_x = newPath[1][1], line1_to_y = newPath[1][2], lP = 0, lenlP = lPath.length - 1; lenlP > lP; lP++) { + for (var line1_from_x = newPath[0][1], line1_from_y = newPath[0][2], line1_to_x = newPath[1][1], line1_to_y = newPath[1][2], lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) { var newLinePath = []; newLinePath.push([ "M", lPath[lP][1], lPath[lP][2] ]), newLinePath.push([ "L", lPath[lP + 1][1], lPath[lP + 1][2] ]); var line2_from_x = newLinePath[0][1], line2_from_y = newLinePath[0][2], line2_to_x = newLinePath[1][1], line2_to_y = newLinePath[1][2], 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); @@ -413,7 +433,7 @@ } } } - this.chart.lines.push(line); + this.chart.lines.push(line), (void 0 === this.chart.minXFromSymbols || this.chart.minXFromSymbols > left.x) && (this.chart.minXFromSymbols = left.x); } (!this.chart.maxXFromLine || this.chart.maxXFromLine && maxX > this.chart.maxXFromLine) && (this.chart.maxXFromLine = maxX); }, module.exports = Symbol; @@ -425,9 +445,9 @@ function(module, exports) { function drawPath(chart, location, points) { var i, len, path = "M{0},{1}"; - for (i = 2, len = 2 * points.length + 2; len > i; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; + for (i = 2, len = 2 * points.length + 2; i < len; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; var pathValues = [ location.x, location.y ]; - for (i = 0, len = points.length; len > i; i++) pathValues.push(points[i].x), pathValues.push(points[i].y); + for (i = 0, len = points.length; i < len; i++) pathValues.push(points[i].x), pathValues.push(points[i].y); var symbol = chart.paper.path(path, pathValues); symbol.attr("stroke", chart.options["element-color"]), symbol.attr("stroke-width", chart.options["line-width"]); var font = chart.options.font, fontF = chart.options["font-family"], fontW = chart.options["font-weight"]; @@ -443,9 +463,9 @@ var i, len; "[object Array]" !== Object.prototype.toString.call(to) && (to = [ to ]); var path = "M{0},{1}"; - for (i = 2, len = 2 * to.length + 2; len > i; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; + for (i = 2, len = 2 * to.length + 2; i < len; i += 2) path += " L{" + i + "},{" + (i + 1) + "}"; var pathValues = [ from.x, from.y ]; - for (i = 0, len = to.length; len > i; i++) pathValues.push(to[i].x), pathValues.push(to[i].y); + for (i = 0, len = to.length; i < len; i++) pathValues.push(to[i].x), pathValues.push(to[i].y); var line = chart.paper.path(path, pathValues); line.attr({ stroke: chart.options["line-color"], @@ -504,8 +524,8 @@ 0 === denominator ? result : (a = line1StartY - line2StartY, b = line1StartX - line2StartX, numerator1 = (line2EndX - line2StartX) * a - (line2EndY - line2StartY) * b, numerator2 = (line1EndX - line1StartX) * a - (line1EndY - line1StartY) * b, a = numerator1 / denominator, b = numerator2 / denominator, result.x = line1StartX + a * (line1EndX - line1StartX), - result.y = line1StartY + a * (line1EndY - line1StartY), a > 0 && 1 > a && (result.onLine1 = !0), - b > 0 && 1 > b && (result.onLine2 = !0), result); + result.y = line1StartY + a * (line1EndY - line1StartY), a > 0 && a < 1 && (result.onLine1 = !0), + b > 0 && b < 1 && (result.onLine2 = !0), result); } module.exports = { drawPath: drawPath, @@ -597,12 +617,12 @@ clean: function() { this.diagram.clean(); } - }, lines = [], prevBreak = 0, i0 = 1, i0len = input.length; i0len > i0; i0++) if ("\n" === input[i0] && "\\" !== input[i0 - 1]) { + }, lines = [], prevBreak = 0, i0 = 1, i0len = input.length; i0 < i0len; i0++) if ("\n" === input[i0] && "\\" !== input[i0 - 1]) { var line0 = input.substring(prevBreak, i0); prevBreak = i0 + 1, lines.push(line0.replace(/\\\n/g, "\n")); } prevBreak < input.length && lines.push(input.substr(prevBreak)); - for (var l = 1, len = lines.length; len > l; ) { + for (var l = 1, len = lines.length; l < len; ) { var currentLine = lines[l]; currentLine.indexOf("->") < 0 && currentLine.indexOf("=>") < 0 && currentLine.indexOf("@>") < 0 ? (lines[l - 1] += "\n" + currentLine, lines.splice(l, 1), len--) : l++; @@ -644,21 +664,21 @@ } /* end of flowstate support */ chart.symbols[symbol.key] = symbol; - } else if (line.indexOf("->") >= 0) for (var flowSymbols = line.split("->"), i = 0, lenS = flowSymbols.length; lenS > i; i++) { + } else if (line.indexOf("->") >= 0) for (var flowSymbols = line.split("->"), i = 0, lenS = flowSymbols.length; i < lenS; i++) { var flowSymb = flowSymbols[i], symbVal = getSymbValue(flowSymb); - ("true" === symbVal || "false" === symbVal) && (flowSymb = flowSymb.replace("true", "yes"), - flowSymb = flowSymb.replace("false", "no")); + "true" !== symbVal && "false" !== symbVal || (// map true or false to yes or no respectively + flowSymb = flowSymb.replace("true", "yes"), flowSymb = flowSymb.replace("false", "no")); var realSymb = getSymbol(flowSymb), next = getNextPath(flowSymb), direction = null; if (next.indexOf(",") >= 0) { var condOpt = next.split(","); next = condOpt[0], direction = condOpt[1].trim(); } - if (chart.start || (chart.start = realSymb), lenS > i + 1) { + if (chart.start || (chart.start = realSymb), i + 1 < lenS) { var nextSymb = flowSymbols[i + 1]; realSymb[next] = getSymbol(nextSymb), realSymb["direction_" + next] = direction, direction = null; } - } else if (line.indexOf("@>") >= 0) for (var lineStyleSymbols = line.split("@>"), i = 0, lenS = lineStyleSymbols.length; lenS > i; i++) if (i + 1 != lenS) { + } else if (line.indexOf("@>") >= 0) for (var lineStyleSymbols = line.split("@>"), i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) if (i + 1 != lenS) { var curSymb = getSymbol(lineStyleSymbols[i]), nextSymb = getSymbol(lineStyleSymbols[i + 1]); curSymb.lineStyle[nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1])); } @@ -740,7 +760,7 @@ this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2), this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength); var self = this; !function shift() { - for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; len > i; i++) if (symb = self.chart.symbols[i], + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) if (symb = self.chart.symbols[i], !self.params["align-next"] || "no" !== self.params["align-next"]) { var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) { @@ -803,24 +823,38 @@ this.top_symbol.setX(topPoint.x + this.top_symbol.width), this.top_symbol.isPositioned = !0, this.top_symbol.render()); } + var self = this; + if (this.left_symbol) { + var leftPoint = this.getLeft(); + this.left_symbol.isPositioned || (this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2), + this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength)), function shift() { + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) if (symb = self.chart.symbols[i], + !self.params["align-next"] || "no" !== self.params["align-next"]) { + var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x); + if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) { + hasSymbolUnder = !0; + break; + } + } + hasSymbolUnder && (self.left_symbol.setX(symb.getX() + symb.width + lineLength), + shift()); + }(), this.left_symbol.isPositioned = !0, this.left_symbol.render()); + } if (this.right_symbol) { var rightPoint = this.getRight(); - if (!this.right_symbol.isPositioned) { - this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2), this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength); - var self = this; - !function shift() { - for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; len > i; i++) if (symb = self.chart.symbols[i], - !self.params["align-next"] || "no" !== self.params["align-next"]) { - var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); - if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) { - hasSymbolUnder = !0; - break; - } + this.right_symbol.isPositioned || (this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2), + this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength), function shift() { + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) if (symb = self.chart.symbols[i], + !self.params["align-next"] || "no" !== self.params["align-next"]) { + var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); + if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) { + hasSymbolUnder = !0; + break; } - hasSymbolUnder && (self.right_symbol.setX(symb.getX() + symb.width + lineLength), - shift()); - }(), this.right_symbol.isPositioned = !0, this.right_symbol.render(); - } + } + hasSymbolUnder && (self.right_symbol.setX(symb.getX() + symb.width + lineLength), + shift()); + }(), this.right_symbol.isPositioned = !0, this.right_symbol.render()); } }, Parallel.prototype.renderLines = function() { this.path1_symbol && this.drawLineTo(this.path1_symbol, "", this.path1_direction), @@ -863,27 +897,28 @@ return this.start = symbol, this.handle(symbol); }, FlowChart.prototype.render = function() { var symbol, line, maxWidth = 0, maxHeight = 0, i = 0, len = 0, maxX = 0, maxY = 0, minX = 0, minY = 0; - for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.width > maxWidth && (maxWidth = symbol.width), + for (i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], symbol.width > maxWidth && (maxWidth = symbol.width), symbol.height > maxHeight && (maxHeight = symbol.height); - for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.shiftX(this.options.x + (maxWidth - symbol.width) / 2 + this.options["line-width"]), + for (i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], symbol.shiftX(this.options.x + (maxWidth - symbol.width) / 2 + this.options["line-width"]), symbol.shiftY(this.options.y + (maxHeight - symbol.height) / 2 + this.options["line-width"]); // for (i = 0, len = this.symbols.length; i < len; i++) { // symbol = this.symbols[i]; // symbol.render(); // } - for (this.start.render(), i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], + for (this.start.render(), i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], symbol.renderLines(); maxX = this.maxXFromLine; var x, y; - for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], x = symbol.getX() + symbol.width, + for (i = 0, len = this.symbols.length; i < len; i++) symbol = this.symbols[i], x = symbol.getX() + symbol.width, y = symbol.getY() + symbol.height, x > maxX && (maxX = x), y > maxY && (maxY = y); - for (i = 0, len = this.lines.length; len > i; i++) { + for (i = 0, len = this.lines.length; i < len; i++) { line = this.lines[i].getBBox(), x = line.x, y = line.y; var x2 = line.x2, y2 = line.y2; - minX > x && (minX = x), minY > y && (minY = y), x2 > maxX && (maxX = x2), y2 > maxY && (maxY = y2); + x < minX && (minX = x), y < minY && (minY = y), x2 > maxX && (maxX = x2), y2 > maxY && (maxY = y2); } var scale = this.options.scale, lineWidth = this.options["line-width"]; - 0 > minX && (minX -= lineWidth), 0 > minY && (minY -= lineWidth); + this.minXFromSymbols < minX && (minX = this.minXFromSymbols), minX < 0 && (minX -= lineWidth), + minY < 0 && (minY -= lineWidth); var width = maxX + lineWidth - minX, height = maxY + lineWidth - minY; this.paper.setSize(width * scale, height * scale), this.paper.setViewBox(minX, minY, width, height, !0); }, FlowChart.prototype.clean = function() { @@ -916,7 +951,7 @@ "yes-text": "yes", "no-text": "no", "arrow-end": "block", - "class": "flowchart", + class: "flowchart", scale: 1, symbols: { start: {}, @@ -941,9 +976,10 @@ var t = Object(this), len = t.length >>> 0; if (0 === len) return -1; var n = 0; - if (arguments.length > 0 && (n = Number(arguments[1]), n != n ? n = 0 : 0 !== n && n != 1 / 0 && n != -(1 / 0) && (n = (n > 0 || -1) * Math.floor(Math.abs(n)))), + if (arguments.length > 0 && (n = Number(arguments[1]), n != n ? // shortcut for verifying if it's NaN + n = 0 : 0 !== n && n != 1 / 0 && n != -(1 / 0) && (n = (n > 0 || -1) * Math.floor(Math.abs(n)))), n >= len) return -1; - for (var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); len > k; k++) if (k in t && t[k] === searchElement) return k; + for (var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); k < len; k++) if (k in t && t[k] === searchElement) return k; return -1; }), // add lastIndexOf to non ECMA-262 standard compliant browsers Array.prototype.lastIndexOf || (Array.prototype.lastIndexOf = function(searchElement) { diff --git a/release/flowchart.js.map b/release/flowchart.js.map index cde6011e..6e7b1311 100644 --- a/release/flowchart.js.map +++ b/release/flowchart.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 9f994aeb1c00ce0f3d07","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","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","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","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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) {\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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t 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 var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\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 (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ },\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ },\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ },\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ },\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ },\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ },\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ },\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ },\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ },\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 9f994aeb1c00ce0f3d07\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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) {\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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n 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\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n this.params = options.params;\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","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 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 var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\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\n **/","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 (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\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n '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\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 13\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 14\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 15\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 16\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap dda107c78c3d12105f77","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","params","match","entries","entry","sub","join","txtAndState","pop","flowSymbols","lenS","symbVal","realSymb","direction","condOpt","nextSymb","lineStyleSymbols","curSymb","JSON","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","left_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t x = symbol.getX() + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap dda107c78c3d12105f77","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n this.params = options.params;\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n x = symbol.getX() + symbol.width;\n y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index f96e5f19..6d3cb2e4 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,7 +1,7 @@ -// flowchart.js, v1.11.1 +// flowchart.js, v1.11.2 // Copyright (c)2018 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js -!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var o=e[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,i),o.loaded=!0,o.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(9);var r=e(4);e(15);var o={parse:r};"undefined"!=typeof window&&(window.flowchart=o),t.exports=o},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var o in i)r[o]=i[o];for(o in t)t[o]&&("object"==typeof r[o]?r[o]=e(r[o],t[o]):r[o]=t[o]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),o=this.getAttr("font-family"),s=this.getAttr("font-weight");r&&this.text.attr({font:r}),o&&this.text.attr({"font-family":o}),s&&this.text.attr({"font-weight":s}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var h=this.getAttr("maxWidth");if(h){for(var n=i.text.split(" "),a="",p=0,l=n.length;l>p;p++){var x=n[p];this.text.attr("text",a+" "+x),a+=this.text.getBBox().width>h?"\n"+x:" "+x}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var y=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*y,height:this.text.getBBox().height+2*y}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var o=e(3),s=o.drawLine,h=o.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function o(){for(var i,r=!1,s=0,h=e.chart.symbols.length;h>s;s++){i=e.chart.symbols[s];var n=Math.abs(i.getCenter().x-e.next.getCenter().x);if(i.getCenter().y>e.next.getCenter().y&&n<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),o())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,o=this.getCenter().x,n=this.getCenter().y,a=this.getRight(),p=this.getBottom(),l=this.getTop(),x=this.getLeft(),y=t.getCenter().x,g=t.getCenter().y,c=t.getTop(),f=t.getRight(),d=t.getLeft(),m=o===y,u=n===g,b=g>n,_=n>g||this===t,v=o>y,w=y>o,k=0,B=this.getAttr("line-length"),A=this.getAttr("line-width");if(e&&"bottom"!==e||!m||!b)if(e&&"right"!==e||!u||!w)if(e&&"left"!==e||!u||!v)if(e&&"right"!==e||!m||!_)if(e&&"right"!==e||!m||!b)if(e&&"bottom"!==e||!v)if(e&&"bottom"!==e||!w)if(e&&"right"===e&&v)r=s(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else if(e&&"right"===e&&w)r=s(this.chart,a,[{x:c.x,y:a.y},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else if(e&&"bottom"===e&&m&&_)r=s(this.chart,p,[{x:p.x,y:p.y+B/2},{x:a.x+B/2,y:p.y+B/2},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.bottomStart=!0,t.topEnd=!0,k=p.x+B/2;else if("left"===e&&m&&_){var O=x.x-B/2;d.xL;L++)for(var X,T=this.chart.lines[L],S=T.attr("path"),Y=r.attr("path"),C=0,E=S.length-1;E>C;C++){var j=[];j.push(["M",S[C][1],S[C][2]]),j.push(["L",S[C+1][1],S[C+1][2]]);for(var P=j[0][1],z=j[0][2],R=j[1][1],F=j[1][2],I=0,N=Y.length-1;N>I;I++){var W=[];W.push(["M",Y[I][1],Y[I][2]]),W.push(["L",Y[I+1][1],Y[I+1][2]]);var V=W[0][1],q=W[0][2],G=W[1][1],Q=W[1][2],J=h(P,z,R,F,V,q,G,Q);if(J.onLine1&&J.onLine2){var $;q===Q?V>G?($=["L",J.x+2*A,q],Y.splice(I+1,0,$),$=["C",J.x+2*A,q,J.x,q-4*A,J.x-2*A,q],Y.splice(I+2,0,$),r.attr("path",Y)):($=["L",J.x-2*A,q],Y.splice(I+1,0,$),$=["C",J.x-2*A,q,J.x,q-4*A,J.x+2*A,q],Y.splice(I+2,0,$),r.attr("path",Y)):q>Q?($=["L",V,J.y+2*A],Y.splice(I+1,0,$),$=["C",V,J.y+2*A,V+4*A,J.y,V,J.y-2*A],Y.splice(I+2,0,$),r.attr("path",Y)):($=["L",V,J.y-2*A],Y.splice(I+1,0,$),$=["C",V,J.y-2*A,V+4*A,J.y,V,J.y+2*A],Y.splice(I+2,0,$),r.attr("path",Y)),I+=2,X+=2}}}this.chart.lines.push(r)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,o,s="M{0},{1}";for(r=2,o=2*e.length+2;o>r;r+=2)s+=" L{"+r+"},{"+(r+1)+"}";var h=[i.x,i.y];for(r=0,o=e.length;o>r;r++)h.push(e[r].x),h.push(e[r].y);var n=t.paper.path(s,h);n.attr("stroke",t.options["element-color"]),n.attr("stroke-width",t.options["line-width"]);var a=t.options.font,p=t.options["font-family"],l=t.options["font-weight"];return a&&n.attr({font:a}),p&&n.attr({"font-family":p}),l&&n.attr({"font-weight":l}),n}function r(t,i,e,r){var o,s;"[object Array]"!==Object.prototype.toString.call(e)&&(e=[e]);var h="M{0},{1}";for(o=2,s=2*e.length+2;s>o;o+=2)h+=" L{"+o+"},{"+(o+1)+"}";var n=[i.x,i.y];for(o=0,s=e.length;s>o;o++)n.push(e[o].x),n.push(e[o].y);var a=t.paper.path(h,n);a.attr({stroke:t.options["line-color"],"stroke-width":t.options["line-width"],"arrow-end":t.options["arrow-end"]});var p=t.options.font,l=t.options["font-family"],x=t.options["font-weight"];if(p&&a.attr({font:p}),l&&a.attr({"font-family":l}),x&&a.attr({"font-weight":x}),r){var y=!1,g=t.paper.text(0,0,r),c=!1,f=e[0];i.y===f.y&&(c=!0);var d=0,m=0;y?(d=i.x>f.x?i.x-(i.x-f.x)/2:f.x-(f.x-i.x)/2,m=i.y>f.y?i.y-(i.y-f.y)/2:f.y-(f.y-i.y)/2,c?(d-=g.getBBox().width/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"],m-=g.getBBox().height/2)):(d=i.x,m=i.y,c?(d+=t.options["text-margin"]/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"]/2,m+=t.options["text-margin"],i.y>f.y&&(m-=2*t.options["text-margin"]))),g.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:d,y:m}),p&&g.attr({font:p}),l&&g.attr({"font-family":l}),x&&g.attr({"font-weight":x})}return a}function o(t,i,e,r,o,s,h,n){var a,p,l,x,y,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(n-s)*(e-t)-(h-o)*(r-i),0===a?g:(p=i-s,l=t-o,x=(h-o)*p-(n-s)*l,y=(e-t)*p-(r-i)*l,p=x/a,l=y/a,g.x=t+p*(e-t),g.y=i+p*(r-i),p>0&&1>p&&(g.onLine1=!0),l>0&&1>l&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:o}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function r(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?g.symbols[t.substring(0,i-1)]:g.symbols[t]}function y(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=j.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var g={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new s(y,t);break;case"end":g[t.key]=new h(y,t);break;case"operation":g[t.key]=new n(y,t);break;case"inputoutput":g[t.key]=new a(y,t);break;case"subroutine":g[t.key]=new p(y,t);break;case"condition":g[t.key]=new l(y,t);break;case"parallel":g[t.key]=new x(y,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var y=new o(t,i);this.diagram=y;var g={};!function c(t,i,o){var s=e(t);return r.start===t?y.startWith(s):i&&o&&!i.pathOk&&(i instanceof l?(o.yes===t&&i.yes(s),o.no===t&&i.no(s)):i instanceof x?(o.path1===t&&i.path1(s),o.path2===t&&i.path2(s),o.path3===t&&i.path3(s)):i.then(s)),s.pathOk?s:(s instanceof l?(t.yes&&c(t.yes,s,t),t.no&&c(t.no,s,t)):s instanceof x?(t.path1&&c(t.path1,s,t),t.path2&&c(t.path2,s,t),t.path3&&c(t.path3,s,t)):t.next&&c(t.next,s,t),s)}(this.start),y.render()},clean:function(){this.diagram.clean()}},c=[],f=0,d=1,m=t.length;m>d;d++)if("\n"===t[d]&&"\\"!==t[d-1]){var u=t.substring(f,d);f=d+1,c.push(u.replace(/\\\n/g,"\n"))}fb;){var v=c[b];v.indexOf("->")<0&&v.indexOf("=>")<0&&v.indexOf("@>")<0?(c[b-1]+="\n"+v,c.splice(b,1),_--):b++}for(;c.length>0;){var w=c.splice(0,1)[0].trim();if(w.indexOf("=>")>=0){var k=w.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var O=A[1].split(","),L=0;L=0&&(X=B.symbolType.split(": "),B.symbolType=X.shift(),B.text=X.join(": ")),B.text&&B.text.indexOf(":>")>=0?(X=B.text.split(":>"),B.text=X.shift(),B.link=X.join(":>")):B.symbolType.indexOf(":>")>=0&&(X=B.symbolType.split(":>"),B.symbolType=X.shift(),B.link=X.join(":>")),B.symbolType.indexOf("\n")>=0&&(B.symbolType=B.symbolType.split("\n")[0]),B.link){var T=B.link.indexOf("[")+1,S=B.link.indexOf("]");T>=0&&S>=0&&(B.target=B.link.substring(T,S),B.link=B.link.substring(0,T-1))}if(B.text&&B.text.indexOf("|")>=0){var Y=B.text.split("|");B.flowstate=Y.pop().trim(),B.text=Y.join("|")}g.symbols[B.key]=B}else if(w.indexOf("->")>=0)for(var C=w.split("->"),L=0,E=C.length;E>L;L++){var j=C[L],P=e(j);("true"===P||"false"===P)&&(j=j.replace("true","yes"),j=j.replace("false","no"));var z=r(j),R=y(j),F=null;if(R.indexOf(",")>=0){var I=R.split(",");R=I[0],F=I[1].trim()}if(g.start||(g.start=z),E>L+1){var N=C[L+1];z[R]=r(N),z["direction_"+R]=F,F=null}}else if(w.indexOf("@>")>=0)for(var W=w.split("@>"),L=0,E=W.length;E>L;L++)if(L+1!=E){var V=r(W[L]),N=r(W[L+1]);V.lineStyle[N.key]=JSON.parse(i(W[L+1]))}}return g}var o=e(7),s=e(13),h=e(10),n=e(12),a=e(11),p=e(14),l=e(5),x=e(6);t.exports=r},function(t,i,e){function r(t,i){i=i||{},o.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.yes_direction="bottom",this.no_direction="right",this.params=i.params,i.yes&&i.direction_yes&&i.no&&!i.direction_no?"right"===i.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):"top"===i.direction_yes?(this.no_direction="right",this.yes_direction="top"):(this.no_direction="right",this.yes_direction="bottom"):i.yes&&!i.direction_yes&&i.no&&i.direction_no?"right"===i.direction_no?(this.yes_direction="bottom",this.no_direction="right"):(this.yes_direction="right",this.no_direction="bottom"):i.yes&&i.direction_yes&&i.no&&i.direction_no&&i.direction_no!==i.direction_yes?"right"===i.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):"top"===i.direction_yes?(this.no_direction="right",this.yes_direction="top"):(this.no_direction="right",this.yes_direction="bottom"):(this.yes_direction="bottom",this.no_direction="right"),this.yes_direction=this.yes_direction||"bottom",this.no_direction=this.no_direction||"right",this.text.attr({x:2*this.textMargin});var e=this.text.getBBox().width+3*this.textMargin;e+=e/2;var r=this.text.getBBox().height+2*this.textMargin;r+=r/2,r=Math.max(.5*e,r);var s=e/4,h=r/4;this.text.attr({x:s+this.textMargin/2});var a={x:s,y:h},p=[{x:s-e/4,y:h+r/4},{x:s-e/4+e/2,y:h+r/4+r/2},{x:s-e/4+e,y:h+r/4},{x:s-e/4+e/2,y:h+r/4-r/2},{x:s-e/4,y:h+r/4}],l=n(t,a,p);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var o=e(2),s=e(1).inherits,h=e(3),n=h.drawPath;s(r,o),r.prototype.render=function(){this.yes_direction&&(this[this.yes_direction+"_symbol"]=this.yes_symbol),this.no_direction&&(this[this.no_direction+"_symbol"]=this.no_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.right_symbol){var e=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(e.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var r=this;!function o(){for(var i,e=!1,s=0,h=r.chart.symbols.length;h>s;s++)if(i=r.chart.symbols[s],!r.params["align-next"]||"no"!==r.params["align-next"]){var n=Math.abs(i.getCenter().x-r.right_symbol.getCenter().x);if(i.getCenter().y>r.right_symbol.getCenter().y&&n<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),o())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},o.call(this,t,i,e),this.textMargin=this.getAttr("text-margin"),this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top",this.params=i.params,"path1"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path2"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path3"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),i.path1&&i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path1?(this.path2_direction="bottom",this.path1_direction="right",this.path3_direction="top"):"top"===i.direction_path1?(this.path2_direction="right",this.path1_direction="top",this.path3_direction="bottom"):"left"===i.direction_path1?(this.path2_direction="right",this.path1_direction="left",this.path3_direction="bottom"):(this.path2_direction="right",this.path1_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="left",this.path3_direction="right"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="top",this.path3_direction="right"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="left"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):(this.path1_direction=i.direction_path1,this.path2_direction=i.direction_path2,this.path3_direction=i.direction_path3),this.path1_direction=this.path1_direction||"bottom",this.path2_direction=this.path2_direction||"right",this.path3_direction=this.path3_direction||"top",this.initialize()}var o=e(2),s=e(1).inherits;s(r,o),r.prototype.render=function(){this.path1_direction&&(this[this.path1_direction+"_symbol"]=this.path1_symbol),this.path2_direction&&(this[this.path2_direction+"_symbol"]=this.path2_symbol),this.path3_direction&&(this[this.path3_direction+"_symbol"]=this.path3_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.top_symbol){var e=this.getTop();this.top_symbol.isPositioned||(this.top_symbol.shiftY(this.getY()-this.top_symbol.height-t),this.top_symbol.setX(e.x+this.top_symbol.width),this.top_symbol.isPositioned=!0,this.top_symbol.render())}if(this.right_symbol){var r=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(r.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var o=this;!function s(){for(var i,e=!1,r=0,h=o.chart.symbols.length;h>r;r++)if(i=o.chart.symbols[r],!o.params["align-next"]||"no"!==o.params["align-next"]){var n=Math.abs(i.getCenter().x-o.right_symbol.getCenter().x);if(i.getCenter().y>o.right_symbol.getCenter().y&&n<=o.right_symbol.width/2){e=!0;break}}e&&(o.right_symbol.setX(i.getX()+i.width+t),s())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.path1_symbol&&this.drawLineTo(this.path1_symbol,"",this.path1_direction),this.path2_symbol&&this.drawLineTo(this.path2_symbol,"",this.path2_direction),this.path3_symbol&&this.drawLineTo(this.path3_symbol,"",this.path3_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new o(t),this.options=s(i,h),this.symbols=[],this.lines=[],this.start=null}var o=e(16),s=e(1).defaults,h=e(8),n=e(5),a=e(6);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof n?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t instanceof a?(t.path1=function(e){return t.path1_symbol=e,t.path2_symbol&&(t.pathOk=!0),i.handle(e)},t.path2=function(e){return t.path2_symbol=e,t.path3_symbol&&(t.pathOk=!0),i.handle(e)},t.path3=function(e){return t.path3_symbol=e,t.path1_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,o=0,s=0,h=0,n=0,a=0,p=0;for(o=0,s=this.symbols.length;s>o;o++)t=this.symbols[o],t.width>e&&(e=t.width),t.height>r&&(r=t.height);for(o=0,s=this.symbols.length;s>o;o++)t=this.symbols[o],t.shiftX(this.options.x+(e-t.width)/2+this.options["line-width"]),t.shiftY(this.options.y+(r-t.height)/2+this.options["line-width"]);for(this.start.render(),o=0,s=this.symbols.length;s>o;o++)t=this.symbols[o],t.renderLines();h=this.maxXFromLine;var l,x;for(o=0,s=this.symbols.length;s>o;o++)t=this.symbols[o],l=t.getX()+t.width,x=t.getY()+t.height,l>h&&(h=l),x>n&&(n=x);for(o=0,s=this.lines.length;s>o;o++){i=this.lines[o].getBBox(),l=i.x,x=i.y;var y=i.x2,g=i.y2;a>l&&(a=l),p>x&&(p=x),y>h&&(h=y),g>n&&(n=g)}var c=this.options.scale,f=this.options["line-width"];0>a&&(a-=f),0>p&&(p-=f);var d=h+f-a,m=n+f-p;this.paper.setSize(d*c,m*c),this.paper.setViewBox(a,p,d,m,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{},parallel:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var o=r>=0?r:Math.max(e-Math.abs(r),0);e>o;o++)if(o in i&&i[o]===t)return o;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var o=r>=0?Math.min(r,e-1):e-Math.abs(r);o>=0;o--)if(o in i&&i[o]===t)return o;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",o.call(this,t,i,e)}var o=e(2),s=e(1).inherits;s(r,o),t.exports=r},function(t,i,e){function r(t,i){i=i||{},o.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,s=this.textMargin,h=r/2,a={x:s,y:h},p=[{x:s-this.textMargin,y:r},{x:s-this.textMargin+e,y:r},{x:s-this.textMargin+e+2*this.textMargin,y:0},{x:s-this.textMargin+2*this.textMargin,y:0},{x:s,y:h}],l=n(t,a,p);l.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&l.attr("href",i.link),i.target&&l.attr("target",i.target),i.key&&(l.node.id=i.key),l.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:l.getBBox().height/2}),this.group.push(l),l.insertBefore(this.text),this.initialize()}var o=e(2),s=e(1).inherits,h=e(3),n=h.drawPath;s(r,o),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},o.call(this,t,i,e)}var o=e(2),s=e(1).inherits;s(r,o),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",o.call(this,t,i,e)}var o=e(2),s=e(1).inherits;s(r,o),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},o.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var s=this.getAttr("font"),h=this.getAttr("font-family"),n=this.getAttr("font-weight");s&&r.attr({font:s}),h&&r.attr({"font-family":h}),n&&r.attr({"font-weight":n}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var o=e(2),s=e(1).inherits;s(r,o),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),o=r(e.text());e.html(""),o.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); +!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(9);var r=e(4);e(15);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),o=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var h=this.getAttr("maxWidth");if(h){for(var n=i.text.split(" "),a="",l=0,p=n.length;lh?"\n"+x:" "+x}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var y=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*y,height:this.text.getBBox().height+2*y}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),o=s.drawLine,h=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this,i=this.getAttr("line-length");if("right"===this.next_direction){var e=this.getRight();this.next.isPositioned||(this.next.setY(e.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+i),function e(){for(var r,s=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&n<=t.next.width/2){s=!0;break}}s&&(t.next.setX(r.getX()+r.width+i),e())}(),this.next.isPositioned=!0,this.next.render())}else if("left"===this.next_direction){var r=this.getLeft();this.next.isPositioned||(this.next.setY(r.y-this.next.height/2),this.next.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var r,s=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&n<=t.next.width/2){s=!0;break}}s&&(t.next.setX(r.getX()+r.width+i),e())}(),this.next.isPositioned=!0,this.next.render())}else{var s=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+i),this.next.setX(s.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,n=this.getCenter().y,a=this.getRight(),l=this.getBottom(),p=this.getTop(),x=this.getLeft(),y=t.getCenter().x,g=t.getCenter().y,c=t.getTop(),f=t.getRight(),d=t.getLeft(),m=s===y,u=n===g,b=ng||this===t,v=s>y,w=sk&&(k=c.x);else r=this.leftEnd&&_?o(this.chart,l,[{x:l.x,y:l.y+B/2},{x:l.x+(l.x-c.x)/2,y:l.y+B/2},{x:l.x+(l.x-c.x)/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i):o(this.chart,l,[{x:l.x,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.bottomStart=!0,t.topEnd=!0,k=l.x+(l.x-c.x)/2;else r=o(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else r=o(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else r=o(this.chart,x,f,i),this.leftStart=!0,t.rightEnd=!0,k=f.x;else r=o(this.chart,a,d,i),this.rightStart=!0,t.leftEnd=!0,k=d.x;else r=o(this.chart,l,c,i),this.bottomStart=!0,t.topEnd=!0,k=l.x;if(this.lineStyle[t.key]&&r&&r.attr(this.lineStyle[t.key]),r){for(var O=0,L=this.chart.lines.length;OG?($=["L",J.x+2*A,q],T.splice(I+1,0,$),$=["C",J.x+2*A,q,J.x,q-4*A,J.x-2*A,q],T.splice(I+2,0,$),r.attr("path",T)):($=["L",J.x-2*A,q],T.splice(I+1,0,$),$=["C",J.x-2*A,q,J.x,q-4*A,J.x+2*A,q],T.splice(I+2,0,$),r.attr("path",T)):q>Q?($=["L",V,J.y+2*A],T.splice(I+1,0,$),$=["C",V,J.y+2*A,V+4*A,J.y,V,J.y-2*A],T.splice(I+2,0,$),r.attr("path",T)):($=["L",V,J.y-2*A],T.splice(I+1,0,$),$=["C",V,J.y-2*A,V+4*A,J.y,V,J.y+2*A],T.splice(I+2,0,$),r.attr("path",T)),I+=2,M+=2}}}this.chart.lines.push(r),(void 0===this.chart.minXFromSymbols||this.chart.minXFromSymbols>x.x)&&(this.chart.minXFromSymbols=x.x)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,o="M{0},{1}";for(r=2,s=2*e.length+2;rf.x?i.x-(i.x-f.x)/2:f.x-(f.x-i.x)/2,m=i.y>f.y?i.y-(i.y-f.y)/2:f.y-(f.y-i.y)/2,c?(d-=g.getBBox().width/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"],m-=g.getBBox().height/2)):(d=i.x,m=i.y,c?(d+=t.options["text-margin"]/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"]/2,m+=t.options["text-margin"],i.y>f.y&&(m-=2*t.options["text-margin"]))),g.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:d,y:m}),l&&g.attr({font:l}),p&&g.attr({"font-family":p}),x&&g.attr({"font-weight":x})}return a}function s(t,i,e,r,s,o,h,n){var a,l,p,x,y,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(n-o)*(e-t)-(h-s)*(r-i),0===a?g:(l=i-o,p=t-s,x=(h-s)*l-(n-o)*p,y=(e-t)*l-(r-i)*p,l=x/a,p=y/a,g.x=t+l*(e-t),g.y=i+l*(r-i),l>0&&l<1&&(g.onLine1=!0),p>0&&p<1&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function r(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?g.symbols[t.substring(0,i-1)]:g.symbols[t]}function y(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=E.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var g={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(y,t);break;case"end":g[t.key]=new h(y,t);break;case"operation":g[t.key]=new n(y,t);break;case"inputoutput":g[t.key]=new a(y,t);break;case"subroutine":g[t.key]=new l(y,t);break;case"condition":g[t.key]=new p(y,t);break;case"parallel":g[t.key]=new x(y,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var y=new s(t,i);this.diagram=y;var g={};!function t(i,s,o){var h=e(i);return r.start===i?y.startWith(h):s&&o&&!s.pathOk&&(s instanceof p?(o.yes===i&&s.yes(h),o.no===i&&s.no(h)):s instanceof x?(o.path1===i&&s.path1(h),o.path2===i&&s.path2(h),o.path3===i&&s.path3(h)):s.then(h)),h.pathOk?h:(h instanceof p?(i.yes&&t(i.yes,h,i),i.no&&t(i.no,h,i)):h instanceof x?(i.path1&&t(i.path1,h,i),i.path2&&t(i.path2,h,i),i.path3&&t(i.path3,h,i)):i.next&&t(i.next,h,i),h)}(this.start),y.render()},clean:function(){this.diagram.clean()}},c=[],f=0,d=1,m=t.length;d")<0&&v.indexOf("=>")<0&&v.indexOf("@>")<0?(c[b-1]+="\n"+v,c.splice(b,1),_--):b++}for(;c.length>0;){var w=c.splice(0,1)[0].trim();if(w.indexOf("=>")>=0){var k=w.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var X=A[1].split(","),O=0;O=0&&(M=B.symbolType.split(": "),B.symbolType=M.shift(),B.text=M.join(": ")),B.text&&B.text.indexOf(":>")>=0?(M=B.text.split(":>"),B.text=M.shift(),B.link=M.join(":>")):B.symbolType.indexOf(":>")>=0&&(M=B.symbolType.split(":>"),B.symbolType=M.shift(),B.link=M.join(":>")),B.symbolType.indexOf("\n")>=0&&(B.symbolType=B.symbolType.split("\n")[0]),B.link){var S=B.link.indexOf("[")+1,C=B.link.indexOf("]");S>=0&&C>=0&&(B.target=B.link.substring(S,C),B.link=B.link.substring(0,S-1))}if(B.text&&B.text.indexOf("|")>=0){var T=B.text.split("|");B.flowstate=T.pop().trim(),B.text=T.join("|")}g.symbols[B.key]=B}else if(w.indexOf("->")>=0)for(var Y=w.split("->"),O=0,P=Y.length;O=0){var I=R.split(",");R=I[0],F=I[1].trim()}if(g.start||(g.start=z),O+1")>=0)for(var W=w.split("@>"),O=0,P=W.length;Or.right_symbol.getCenter().y&&n<=r.right_symbol.width/2){s=!0;break}}s&&(r.right_symbol.setX(e.getX()+e.width+t),i())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),this.textMargin=this.getAttr("text-margin"),this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top",this.params=i.params,"path1"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path2"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path3"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),i.path1&&i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path1?(this.path2_direction="bottom",this.path1_direction="right",this.path3_direction="top"):"top"===i.direction_path1?(this.path2_direction="right",this.path1_direction="top",this.path3_direction="bottom"):"left"===i.direction_path1?(this.path2_direction="right",this.path1_direction="left",this.path3_direction="bottom"):(this.path2_direction="right",this.path1_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="left",this.path3_direction="right"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="top",this.path3_direction="right"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="left"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):(this.path1_direction=i.direction_path1,this.path2_direction=i.direction_path2,this.path3_direction=i.direction_path3),this.path1_direction=this.path1_direction||"bottom",this.path2_direction=this.path2_direction||"right",this.path3_direction=this.path3_direction||"top",this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),r.prototype.render=function(){this.path1_direction&&(this[this.path1_direction+"_symbol"]=this.path1_symbol),this.path2_direction&&(this[this.path2_direction+"_symbol"]=this.path2_symbol),this.path3_direction&&(this[this.path3_direction+"_symbol"]=this.path3_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.top_symbol){var e=this.getTop();this.top_symbol.isPositioned||(this.top_symbol.shiftY(this.getY()-this.top_symbol.height-t),this.top_symbol.setX(e.x+this.top_symbol.width),this.top_symbol.isPositioned=!0,this.top_symbol.render())}var r=this;if(this.left_symbol){var s=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(s.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+t)),function i(){for(var e,s=!1,o=0,h=r.chart.symbols.length;or.left_symbol.getCenter().y&&n<=r.left_symbol.width/2){s=!0;break}}s&&(r.left_symbol.setX(e.getX()+e.width+t),i())}(),this.left_symbol.isPositioned=!0,this.left_symbol.render())}if(this.right_symbol){var o=this.getRight();this.right_symbol.isPositioned||(this.right_symbol.setY(o.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t),function i(){for(var e,s=!1,o=0,h=r.chart.symbols.length;or.right_symbol.getCenter().y&&n<=r.right_symbol.width/2){s=!0;break}}s&&(r.right_symbol.setX(e.getX()+e.width+t),i())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}},r.prototype.renderLines=function(){this.path1_symbol&&this.drawLineTo(this.path1_symbol,"",this.path1_direction),this.path2_symbol&&this.drawLineTo(this.path2_symbol,"",this.path2_direction),this.path3_symbol&&this.drawLineTo(this.path3_symbol,"",this.path3_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=o(i,h),this.symbols=[],this.lines=[],this.start=null}var s=e(16),o=e(1).defaults,h=e(8),n=e(5),a=e(6);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof n?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t instanceof a?(t.path1=function(e){return t.path1_symbol=e,t.path2_symbol&&(t.pathOk=!0),i.handle(e)},t.path2=function(e){return t.path2_symbol=e,t.path3_symbol&&(t.pathOk=!0),i.handle(e)},t.path3=function(e){return t.path3_symbol=e,t.path1_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,o=0,h=0,n=0,a=0,l=0;for(s=0,o=this.symbols.length;se&&(e=t.width),t.height>r&&(r=t.height);for(s=0,o=this.symbols.length;sh&&(h=p),x>n&&(n=x);for(s=0,o=this.lines.length;sh&&(h=y),g>n&&(n=g)}var c=this.options.scale,f=this.options["line-width"];this.minXFromSymbols>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);s>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,h=r/2,a={x:o,y:h},l=[{x:o-this.textMargin,y:r},{x:o-this.textMargin+e,y:r},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:h}],p=n(t,a,l);p.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&p.attr("href",i.link),i.target&&p.attr("target",i.target),i.key&&(p.node.id=i.key),p.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:p.getBBox().height/2}),this.group.push(p),p.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,h=e(3),n=h.drawPath;o(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var o=this.getAttr("font"),h=this.getAttr("font-family"),n=this.getAttr("font-weight");o&&r.attr({font:o}),h&&r.attr({"font-family":h}),n&&r.attr({"font-weight":n}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); //# sourceMappingURL=flowchart.min.js.map \ No newline at end of file diff --git a/release/flowchart.min.js.map b/release/flowchart.min.js.map index f65c2aee..8099ca0a 100644 --- a/release/flowchart.min.js.map +++ b/release/flowchart.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 391a1f56afcd8d86a177","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","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","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","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\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ },\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ },\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.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) {\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 }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ },\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ },\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ },\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t 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 var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\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 (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\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 391a1f56afcd8d86a177\n **/","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.helpers.js\n ** module id = 1\n ** module chunks = 0\n **/","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.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) {\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 }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.js\n ** module id = 2\n ** module chunks = 0\n **/","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n 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\n **/","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n this.params = options.params;\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.condition.js\n ** module id = 5\n ** module chunks = 0\n **/","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 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 var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\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\n **/","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 (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\n **/","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n '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\n **/","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.shim.js\n ** module id = 9\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.end.js\n ** module id = 10\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.inputoutput.js\n ** module id = 11\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.operation.js\n ** module id = 12\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.start.js\n ** module id = 13\n ** module chunks = 0\n **/","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.symbol.subroutine.js\n ** module id = 14\n ** module chunks = 0\n **/","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/jquery-plugin.js\n ** module id = 15\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 16\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap d3ecf33745c811efe3d7","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","params","match","entries","entry","sub","join","txtAndState","pop","flowSymbols","lenS","symbVal","realSymb","direction","condOpt","nextSymb","lineStyleSymbols","curSymb","JSON","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","left_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t x = symbol.getX() + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap d3ecf33745c811efe3d7","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n this.params = options.params;\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n x = symbol.getX() + symbol.width;\n y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/releasenotes.md b/releasenotes.md index ec635c48..59d03841 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,7 @@ +### v1.11.2 + +- try to optimize left handling [#152](https://github.com/adrai/flowchart.js/issues/152) + ### v1.11.1 - fix direction issue for condition [#151](https://github.com/adrai/flowchart.js/issues/151) diff --git a/site b/site index fe48159f..2e247b70 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit fe48159fc1889a8e470fe1a73eb9af3317110ebb +Subproject commit 2e247b700ae85a92014bd32f374c2e3643582834 diff --git a/src/flowchart.chart.js b/src/flowchart.chart.js index cf3f2278..4305e06d 100644 --- a/src/flowchart.chart.js +++ b/src/flowchart.chart.js @@ -155,6 +155,8 @@ FlowChart.prototype.render = function() { var scale = this.options['scale']; var lineWidth = this.options['line-width']; + if (this.minXFromSymbols < minX) minX = this.minXFromSymbols; + if (minX < 0) minX -= lineWidth; if (minY < 0) minY -= lineWidth; diff --git a/src/flowchart.symbol.js b/src/flowchart.symbol.js index 822f99dc..60798d42 100644 --- a/src/flowchart.symbol.js +++ b/src/flowchart.symbol.js @@ -162,6 +162,7 @@ Symbol.prototype.getRight = function() { Symbol.prototype.render = function() { if (this.next) { + var self = this; var lineLength = this.getAttr('line-length'); if (this.next_direction === 'right') { @@ -169,11 +170,40 @@ Symbol.prototype.render = function() { var rightPoint = this.getRight(); if (!this.next.isPositioned) { - this.next.setY(rightPoint.y - this.next.height/2); this.next.shiftX(this.group.getBBox().x + this.width + lineLength); - var self = this; + (function shift() { + var hasSymbolUnder = false; + var symb; + for (var i = 0, len = self.chart.symbols.length; i < len; i++) { + symb = self.chart.symbols[i]; + + var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x); + if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) { + hasSymbolUnder = true; + break; + } + } + + if (hasSymbolUnder) { + self.next.setX(symb.getX() + symb.width + lineLength); + shift(); + } + })(); + + this.next.isPositioned = true; + + this.next.render(); + } + } else if (this.next_direction === 'left') { + + var leftPoint = this.getLeft(); + + if (!this.next.isPositioned) { + this.next.setY(leftPoint.y - this.next.height/2); + this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength)); + (function shift() { var hasSymbolUnder = false; var symb; @@ -305,6 +335,16 @@ Symbol.prototype.drawLineTo = function(symbol, text, origin) { this.bottomStart = true; symbol.topEnd = true; maxX = bottom.x + (bottom.x - symbolTop.x)/2; + } else if ((!origin || origin === 'bottom') && isRight && isUnder) { + line = drawLine(this.chart, bottom, [ + {x: bottom.x, y: symbolTop.y - lineLength/2}, + {x: symbolTop.x, y: symbolTop.y - lineLength/2}, + {x: symbolTop.x, y: symbolTop.y} + ], text); + this.bottomStart = true; + symbol.topEnd = true; + maxX = bottom.x; + if (symbolTop.x > maxX) maxX = symbolTop.x; } else if ((!origin || origin === 'bottom') && isRight) { line = drawLine(this.chart, bottom, [ {x: bottom.x, y: bottom.y + lineLength/2}, @@ -382,7 +422,7 @@ Symbol.prototype.drawLineTo = function(symbol, text, origin) { //update line style if (this.lineStyle[symbol.key] && line){ - line.attr( this.lineStyle[symbol.key]); + line.attr(this.lineStyle[symbol.key]); } if (line) { @@ -455,6 +495,9 @@ Symbol.prototype.drawLineTo = function(symbol, text, origin) { } this.chart.lines.push(line); + if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) { + this.chart.minXFromSymbols = left.x; + } } if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) { diff --git a/src/flowchart.symbol.parallel.js b/src/flowchart.symbol.parallel.js index 90f8cf1c..c01b464c 100644 --- a/src/flowchart.symbol.parallel.js +++ b/src/flowchart.symbol.parallel.js @@ -120,14 +120,47 @@ Parallel.prototype.render = function() { } } + var self = this; + + if (this.left_symbol) { + var leftPoint = this.getLeft(); + + if (!this.left_symbol.isPositioned) { + this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2); + this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength)); + (function shift() { + var hasSymbolUnder = false; + var symb; + for (var i = 0, len = self.chart.symbols.length; i < len; i++) { + symb = self.chart.symbols[i]; + + if (!self.params['align-next'] || self.params['align-next'] !== 'no') { + var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x); + if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) { + hasSymbolUnder = true; + break; + } + } + } + + if (hasSymbolUnder) { + self.left_symbol.setX(symb.getX() + symb.width + lineLength); + shift(); + } + })(); + + this.left_symbol.isPositioned = true; + + this.left_symbol.render(); + } + } + if (this.right_symbol) { var rightPoint = this.getRight(); if (!this.right_symbol.isPositioned) { - this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2); this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength); - var self = this; (function shift() { var hasSymbolUnder = false; var symb; From 5ef39573a7dc1cc9c01e4371a676cb850558f86c Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Tue, 3 Jul 2018 22:04:08 +0200 Subject: [PATCH 052/117] try to optimize horizontal rendering for end symbols #155 --- package.json | 2 +- release/flowchart.js | 30 +++++++++++++++++++++--------- release/flowchart.js.map | 2 +- release/flowchart.min.js | 4 ++-- release/flowchart.min.js.map | 2 +- releasenotes.md | 4 ++++ src/flowchart.symbol.condition.js | 1 + src/flowchart.symbol.js | 2 ++ src/flowchart.symbol.parallel.js | 2 ++ 9 files changed, 35 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index c0cb3187..2019ea65 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.11.2", + "version": "1.11.3", "main": "./index", "private": false, "engines": { diff --git a/release/flowchart.js b/release/flowchart.js index 0ce34e41..a347409e 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,4 +1,4 @@ -// flowchart.js, v1.11.2 +// flowchart.js, v1.11.3 // Copyright (c)2018 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js @@ -237,7 +237,10 @@ break; } } - hasSymbolUnder && (self.next.setX(symb.getX() + symb.width + lineLength), shift()); + if (hasSymbolUnder) { + if ("end" === self.next.symbolType) return; + self.next.setX(symb.getX() + symb.width + lineLength), shift(); + } }(), this.next.isPositioned = !0, this.next.render()); } else if ("left" === this.next_direction) { var leftPoint = this.getLeft(); @@ -251,7 +254,10 @@ break; } } - hasSymbolUnder && (self.next.setX(symb.getX() + symb.width + lineLength), shift()); + if (hasSymbolUnder) { + if ("end" === self.next.symbolType) return; + self.next.setX(symb.getX() + symb.width + lineLength), shift(); + } }(), this.next.isPositioned = !0, this.next.render()); } else { var bottomPoint = this.getBottom(); @@ -768,8 +774,10 @@ break; } } - hasSymbolUnder && (self.right_symbol.setX(symb.getX() + symb.width + lineLength), - shift()); + if (hasSymbolUnder) { + if ("end" === self.right_symbol.symbolType) return; + self.right_symbol.setX(symb.getX() + symb.width + lineLength), shift(); + } }(), this.right_symbol.isPositioned = !0, this.right_symbol.render(); } } @@ -836,8 +844,10 @@ break; } } - hasSymbolUnder && (self.left_symbol.setX(symb.getX() + symb.width + lineLength), - shift()); + if (hasSymbolUnder) { + if ("end" === self.left_symbol.symbolType) return; + self.left_symbol.setX(symb.getX() + symb.width + lineLength), shift(); + } }(), this.left_symbol.isPositioned = !0, this.left_symbol.render()); } if (this.right_symbol) { @@ -852,8 +862,10 @@ break; } } - hasSymbolUnder && (self.right_symbol.setX(symb.getX() + symb.width + lineLength), - shift()); + if (hasSymbolUnder) { + if ("end" === self.right_symbol.symbolType) return; + self.right_symbol.setX(symb.getX() + symb.width + lineLength), shift(); + } }(), this.right_symbol.isPositioned = !0, this.right_symbol.render()); } }, Parallel.prototype.renderLines = function() { diff --git a/release/flowchart.js.map b/release/flowchart.js.map index 6e7b1311..3d9cba50 100644 --- a/release/flowchart.js.map +++ b/release/flowchart.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap dda107c78c3d12105f77","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","params","match","entries","entry","sub","join","txtAndState","pop","flowSymbols","lenS","symbVal","realSymb","direction","condOpt","nextSymb","lineStyleSymbols","curSymb","JSON","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","left_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t x = symbol.getX() + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap dda107c78c3d12105f77","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n this.params = options.params;\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n x = symbol.getX() + symbol.width;\n y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap b37b19315d17d041d426","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","params","match","entries","entry","sub","join","txtAndState","pop","flowSymbols","lenS","symbVal","realSymb","direction","condOpt","nextSymb","lineStyleSymbols","curSymb","JSON","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","left_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":";;;;;CAAA,SAAAA,MAAAC;IACA,uBAAAC,WAAA,mBAAAC,QACAA,OAAAD,UAAAD,QAAAG,QAAA,kBACA,yBAAAC,iBAAAC,KACAD,SAAA,aAAAJ,eACA;QACA,IAAAM,IAAAN,QAAA,mBAAAC,UAAAE,QAAA,aAAAJ,KAAA;QACA,SAAAQ,KAAAD,IAAA,mBAAAL,oBAAAF,MAAAQ,KAAAD,EAAAC;;EAECC,MAAA,SAAAC;;IACD,OCAgB,SAAUC;;;;;QCN1B,SAAAC,oBAAAC;;;;;YAGA,IAAAC,iBAAAD;YACA,OAAAC,iBAAAD,UAAAX;;;;;YAGA,IAAAC,SAAAW,iBAAAD;;gBACAX;;gBACAa,IAAAF;;gBACAG,SAAA;;;;;;;;;;;;;;YAUA,OANAL,QAAAE,UAAAI,KAAAd,OAAAD,SAAAC,eAAAD,SAAAU;YAGAT,OAAAa,UAAA,GAGAb,OAAAD;;;;;;QAvBA,IAAAY;;;;;;;;;;;;;;;;;;QAqCA,OATAF,oBAAAM,IAAAP,SAGAC,oBAAAO,IAAAL;QAGAF,oBAAAQ,IAAA,IAGAR,oBAAA;;;;;;IDmBM,SAAUT,QAAQD,SAASU;QEzDjCA,gDAAA;QACA,IAAAS,QAAAT,iDAAA;QACAA,+CAAA;QAEA,IAAAU;YACAD;;QAGA,sBAAAE,WACAA,OAAAC,YAAAF,YAGAnB,OAAAD,UAAAoB;;;;;;IFmEM,SAAUnB,QAAQD;QG/ExB,SAAAuB,UAAAC,SAAAC;YACA,KAAAD,WAAA,qBAAAA,SACA,OAAAC;YAGA,IAAAC;YACA,SAAAC,YAAAF,gBACAC,OAAAC,YAAAF,eAAAE;YAGA,KAAAA,YAAAH,SACAA,QAAAG,cACA,mBAAAD,OAAAC,YACAD,OAAAC,YAAAJ,UAAAG,OAAAC,WAAAH,QAAAG,aAEAD,OAAAC,YAAAH,QAAAG;YAIA,OAAAD;;QAGA,SAAAE,UAAAC,MAAAC;YACA,yBAAAC,OAAA;YAEAF,KAAAG,SAAAF,WACAD,KAAAI,YAAAF,OAAAG,OAAAJ,UAAAG;gBACAE;oBACAC,OAAAP;oBACAQ,aAAA;oBACAC,WAAA;oBACAC,eAAA;;qBAGA;;gBAEAV,KAAAG,SAAAF;gBACA,IAAAU,WAAA;gBACAA,SAAAP,YAAAH,UAAAG,WACAJ,KAAAI,YAAA,IAAAO,YACAX,KAAAI,UAAAE,cAAAN;;;;;QAMA5B,OAAAD;YACAyC,UAAAlB;YACAmB,UAAAd;;;;;;;IH0FM,SAAU3B,QAAQD,SAASU;QItIjC,SAAAiC,OAAAC,OAAApB,SAAAqB;YACAtC,KAAAqC,eACArC,KAAAuC,QAAAvC,KAAAqC,MAAAG,MAAAC,OACAzC,KAAAsC,iBACAtC,KAAA0C;YACA1C,KAAA2C,aAAA1B,QAAA0B,YACA3C,KAAA4C,YAAA3B,QAAA2B,aAAA;YACA5C,KAAA6C,YAAA5B,QAAA4B,iBACA7C,KAAA8C,MAAA7B,QAAA6B,OAAA,IAEA9C,KAAA+C,iBAAA9B,QAAA+B,QAAA/B,QAAA,iBAAAA,QAAA,iBAAAgC;YAEAjD,KAAAkD,OAAAlD,KAAAqC,MAAAG,MAAAU,KAAA,MAAAjC,QAAAiC;YAEAjC,QAAA6B,QAAA9C,KAAAkD,KAAAC,KAAA7C,KAAAW,QAAA6B,MAAA,MACA9C,KAAAkD,KAAAC,KAAAC,aAAA,SAAApD,KAAAqD,QAAA;YAEArD,KAAAkD,KAAAI;gBACAC,eAAA;gBACAC,GAAAxD,KAAAqD,QAAA;gBACAI,MAAAzD,KAAAqD,QAAA;gBACAK,aAAA1D,KAAAqD,QAAA;;YAGA,IAAAM,OAAA3D,KAAAqD,QAAA,SACAO,QAAA5D,KAAAqD,QAAA,gBACAQ,QAAA7D,KAAAqD,QAAA;YAEAM,QAAA3D,KAAAkD,KAAAI;gBAAAK;gBACAC,SAAA5D,KAAAkD,KAAAI;gBAAAQ,eAAAF;gBACAC,SAAA7D,KAAAkD,KAAAI;gBAAAS,eAAAF;gBAEA5C,QAAA+C,QAAAhE,KAAAkD,KAAAI,KAAA,QAAArC,QAAA+C,OACA/C,QAAAgD,UAAAjE,KAAAkD,KAAAI,KAAA,UAAArC,QAAAgD;YAEA,IAAAC,WAAAlE,KAAAqD,QAAA;YACA,IAAAa,UAAA;gBAIA,SAFAC,QAAAlD,QAAAiC,KAAAkB,MAAA,MACAC,WAAA,IACAtE,IAAA,GAAAuE,KAAAH,MAAAI,QAAAxE,IAAAuE,IAAAvE,KAAA;oBACA,IAAAyE,OAAAL,MAAApE;oBACAC,KAAAkD,KAAAI,KAAA,QAAAe,WAAA,MAAAG,OAEAH,YADArE,KAAAkD,KAAAuB,UAAAC,QAAAR,WACA,OAAAM,OAEA,MAAAA;;gBAGAxE,KAAAkD,KAAAI,KAAA,QAAAe,SAAAM,UAAA;;YAKA,IAFA3E,KAAAuC,MAAAqC,KAAA5E,KAAAkD,OAEAZ,QAAA;gBACA,IAAAuC,YAAA7E,KAAAqD,QAAA;gBAEAf,OAAAgB;oBACAG,MAAAzD,KAAAqD,QAAA;oBACAyB,QAAA9E,KAAAqD,QAAA;oBACA0B,gBAAA/E,KAAAqD,QAAA;oBACAqB,OAAA1E,KAAAkD,KAAAuB,UAAAC,QAAA,IAAAG;oBACAG,QAAAhF,KAAAkD,KAAAuB,UAAAO,SAAA,IAAAH;oBAGAvC,OAAAa,KAAAC,aAAA,SAAApD,KAAAqD,QAAA,WAEApC,QAAA+C,QAAA1B,OAAAgB,KAAA,QAAArC,QAAA+C;gBACA/C,QAAAgD,UAAA3B,OAAAgB,KAAA,UAAArC,QAAAgD,SACAhD,QAAA6B,QAAAR,OAAAa,KAAA7C,KAAAW,QAAA6B;gBAEA9C,KAAAuC,MAAAqC,KAAAtC,SACAA,OAAA2C,aAAAjF,KAAAkD,OAEAlD,KAAAkD,KAAAI;oBACA4B,GAAA5C,OAAAmC,UAAAO,SAAA;oBAGAhF,KAAAmF;;;QAlFA,IAAAC,UAAAjF,iDAAA,IACAkF,WAAAD,QAAAC,UACAC,wBAAAF,QAAAE;;QAsFAlD,OAAAV,UAAA2B,UAAA,SAAAkC;YACA,IAAAvF,KAAAqC,OAAA;gBAGA,IAEAmD,MAFAC,OAAAzF,KAAAqC,MAAA,UAAArC,KAAAqC,MAAApB,QAAAsE,WAAAtC,QACAyC,OAAA1F,KAAAqC,MAAApB,QAAA,UAAAjB,KAAAqC,MAAApB,QAAA0E,QAAA3F,KAAA2C,YAAA4C,WAAAtC;gBAKA,OAHAjD,KAAAqC,MAAApB,QAAA2B,aAAA5C,KAAAqC,MAAApB,QAAA2B,UAAA5C,KAAA4C,eACA4C,OAAAxF,KAAAqC,MAAApB,QAAA2B,UAAA5C,KAAA4C,WAAA2C;gBAEAC,QAAAE,QAAAD;;WAGArD,OAAAV,UAAAyD,aAAA;YACAnF,KAAAuC,MAAAqD,UAAA,MAAA5F,KAAAqD,QAAA,sBAAArD,KAAAqD,QAAA;YAEArD,KAAA0E,QAAA1E,KAAAuC,MAAAkC,UAAAC,OACA1E,KAAAgF,SAAAhF,KAAAuC,MAAAkC,UAAAO;WAGA5C,OAAAV,UAAAmE,YAAA;YACA;gBAAArC,GAAAxD,KAAA8F,SAAA9F,KAAA0E,QAAA;gBACAQ,GAAAlF,KAAA+F,SAAA/F,KAAAgF,SAAA;;WAGA5C,OAAAV,UAAAoE,OAAA;YACA,OAAA9F,KAAAuC,MAAAkC,UAAAjB;WAGApB,OAAAV,UAAAqE,OAAA;YACA,OAAA/F,KAAAuC,MAAAkC,UAAAS;WAGA9C,OAAAV,UAAAsE,SAAA,SAAAxC;YACAxD,KAAAuC,MAAAqD,UAAA,OAAA5F,KAAA8F,SAAAtC,KAAA,MAAAxD,KAAA+F;WAGA3D,OAAAV,UAAAuE,OAAA,SAAAzC;YACAxD,KAAAuC,MAAAqD,UAAA,MAAApC,IAAA,MAAAxD,KAAA+F;WAGA3D,OAAAV,UAAAwE,SAAA,SAAAhB;YACAlF,KAAAuC,MAAAqD,UAAA,MAAA5F,KAAA8F,SAAA,OAAA9F,KAAA+F,SAAAb;WAGA9C,OAAAV,UAAAyE,OAAA,SAAAjB;YACAlF,KAAAuC,MAAAqD,UAAA,MAAA5F,KAAA8F,SAAA,MAAAZ;WAGA9C,OAAAV,UAAA0E,SAAA;YACA,IAAAlB,IAAAlF,KAAA+F,QACAvC,IAAAxD,KAAA8F,SAAA9F,KAAA0E,QAAA;YACA;gBAAAlB;gBAAA0B;;WAGA9C,OAAAV,UAAA2E,YAAA;YACA,IAAAnB,IAAAlF,KAAA+F,SAAA/F,KAAAgF,QACAxB,IAAAxD,KAAA8F,SAAA9F,KAAA0E,QAAA;YACA;gBAAAlB;gBAAA0B;;WAGA9C,OAAAV,UAAA4E,UAAA;YACA,IAAApB,IAAAlF,KAAA+F,SAAA/F,KAAAuC,MAAAkC,UAAAO,SAAA,GACAxB,IAAAxD,KAAA8F;YACA;gBAAAtC;gBAAA0B;;WAGA9C,OAAAV,UAAA6E,WAAA;YACA,IAAArB,IAAAlF,KAAA+F,SAAA/F,KAAAuC,MAAAkC,UAAAO,SAAA,GACAxB,IAAAxD,KAAA8F,SAAA9F,KAAAuC,MAAAkC,UAAAC;YACA;gBAAAlB;gBAAA0B;;WAGA9C,OAAAV,UAAA8E,SAAA;YACA,IAAAxG,KAAAgD,MAAA;gBAEA,IAAAyD,OAAAzG,MACA0G,aAAA1G,KAAAqD,QAAA;gBAEA,gBAAArD,KAAA+C,gBAAA;oBAEA,IAAA4D,aAAA3G,KAAAuG;oBAEAvG,KAAAgD,KAAA4D,iBACA5G,KAAAgD,KAAAmD,KAAAQ,WAAAzB,IAAAlF,KAAAgD,KAAAgC,SAAA;oBACAhF,KAAAgD,KAAAgD,OAAAhG,KAAAuC,MAAAkC,UAAAjB,IAAAxD,KAAA0E,QAAAgC,aAEA,SAAAG;wBAGA,SADAC,MADAC,kBAAA,GAEAhH,IAAA,GAAAiH,MAAAP,KAAApE,MAAAsD,QAAApB,QAAAxE,IAAAiH,KAAAjH,KAAA;4BACA+G,OAAAL,KAAApE,MAAAsD,QAAA5F;4BAEA,IAAAkH,OAAAC,KAAAC,IAAAL,KAAAjB,YAAArC,IAAAiD,KAAAzD,KAAA6C,YAAArC;4BACA,IAAAsD,KAAAjB,YAAAX,IAAAuB,KAAAzD,KAAA6C,YAAAX,KAAA+B,QAAAR,KAAAzD,KAAA0B,QAAA;gCACAqC,kBAAA;gCACA;;;wBAIA,IAAAA,gBAAA;4BACA,cAAAN,KAAAzD,KAAAL,YAAA;4BACA8D,KAAAzD,KAAAiD,KAAAa,KAAAhB,SAAAgB,KAAApC,QAAAgC,aACAG;;yBAIA7G,KAAAgD,KAAA4D,gBAAA,GAEA5G,KAAAgD,KAAAwD;uBAEA,eAAAxG,KAAA+C,gBAAA;oBAEA,IAAAqE,YAAApH,KAAAsG;oBAEAtG,KAAAgD,KAAA4D,iBACA5G,KAAAgD,KAAAmD,KAAAiB,UAAAlC,IAAAlF,KAAAgD,KAAAgC,SAAA,IACAhF,KAAAgD,KAAAgD,SAAAhG,KAAAuC,MAAAkC,UAAAjB,IAAAxD,KAAA0E,QAAAgC;oBAEA,SAAAG;wBAGA,SADAC,MADAC,kBAAA,GAEAhH,IAAA,GAAAiH,MAAAP,KAAApE,MAAAsD,QAAApB,QAAAxE,IAAAiH,KAAAjH,KAAA;4BACA+G,OAAAL,KAAApE,MAAAsD,QAAA5F;4BAEA,IAAAkH,OAAAC,KAAAC,IAAAL,KAAAjB,YAAArC,IAAAiD,KAAAzD,KAAA6C,YAAArC;4BACA,IAAAsD,KAAAjB,YAAAX,IAAAuB,KAAAzD,KAAA6C,YAAAX,KAAA+B,QAAAR,KAAAzD,KAAA0B,QAAA;gCACAqC,kBAAA;gCACA;;;wBAIA,IAAAA,gBAAA;4BACA,cAAAN,KAAAzD,KAAAL,YAAA;4BACA8D,KAAAzD,KAAAiD,KAAAa,KAAAhB,SAAAgB,KAAApC,QAAAgC,aACAG;;yBAIA7G,KAAAgD,KAAA4D,gBAAA,GAEA5G,KAAAgD,KAAAwD;uBAEA;oBACA,IAAAa,cAAArH,KAAAqG;oBAEArG,KAAAgD,KAAA4D,iBACA5G,KAAAgD,KAAAkD,OAAAlG,KAAA+F,SAAA/F,KAAAgF,SAAA0B;oBACA1G,KAAAgD,KAAAiD,KAAAoB,YAAA7D,IAAAxD,KAAAgD,KAAA0B,QAAA,IACA1E,KAAAgD,KAAA4D,gBAAA;oBAEA5G,KAAAgD,KAAAwD;;;WAMApE,OAAAV,UAAA4F,cAAA;YACAtH,KAAAgD,SACAhD,KAAA+C,iBACA/C,KAAAuH,WAAAvH,KAAAgD,MAAAhD,KAAAqD,QAAA,qBAAArD,KAAA+C,kBAEA/C,KAAAuH,WAAAvH,KAAAgD,MAAAhD,KAAAqD,QAAA;WAKAjB,OAAAV,UAAA6F,aAAA,SAAAjF,QAAAY,MAAAsE;YACAxH,KAAA0C,YAAA+E,QAAAnF,UAAA,KACAtC,KAAA0C,YAAAkC,KAAAtC;YAGA,IAqBAoF,MArBAlE,IAAAxD,KAAA6F,YAAArC,GACA0B,IAAAlF,KAAA6F,YAAAX,GACAyC,QAAA3H,KAAAuG,YACAqB,SAAA5H,KAAAqG,aACAwB,MAAA7H,KAAAoG,UACA0B,OAAA9H,KAAAsG,WAEAyB,UAAAzF,OAAAuD,YAAArC,GACAwE,UAAA1F,OAAAuD,YAAAX,GACA+C,YAAA3F,OAAA8D,UACA8B,cAAA5F,OAAAiE,YACA4B,aAAA7F,OAAAgE,WAEA8B,iBAAA5E,MAAAuE,SACAM,eAAAnD,MAAA8C,SACAM,UAAApD,IAAA8C,SACAO,UAAArD,IAAA8C,WAAAhI,SAAAsC,QACAkG,SAAAhF,IAAAuE,SACAU,UAAAjF,IAAAuE,SAEAW,OAAA,GAEAhC,aAAA1G,KAAAqD,QAAA,gBACAsF,WAAA3I,KAAAqD,QAAA;YAEA,IAAAmE,UAAA,aAAAA,WAAAY,mBAAAE,SAKA,IAAAd,UAAA,YAAAA,WAAAa,iBAAAI,SAKA,IAAAjB,UAAA,WAAAA,WAAAa,iBAAAG,QAKA,IAAAhB,UAAA,YAAAA,WAAAY,mBAAAG,SAUA,IAAAf,UAAA,YAAAA,WAAAY,mBAAAE,SAUA,IAAAd,UAAA,aAAAA,WAAAgB,QAmBA,IAAAhB,UAAA,aAAAA,WAAAiB,YAAAH,SAUA,IAAAd,UAAA,aAAAA,WAAAiB,SAWA,IAAAjB,UAAA,YAAAA,UAAAgB,QACAd,OAAArC,SAAArF,KAAAqC,OAAAsF;gBACAnE,GAAAmE,MAAAnE,IAAAkD,aAAA;gBAAAxB,GAAAyC,MAAAzC;;gBACA1B,GAAAmE,MAAAnE,IAAAkD,aAAA;gBAAAxB,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C;iBACAhC,OACAlD,KAAA4I,cAAA,GACAtG,OAAAuG,UAAA,GACAH,OAAAf,MAAAnE,IAAAkD,aAAA,QACA,IAAAc,UAAA,YAAAA,UAAAiB,SACAf,OAAArC,SAAArF,KAAAqC,OAAAsF;gBACAnE,GAAAyE,UAAAzE;gBAAA0B,GAAAyC,MAAAzC;;gBACA1B,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C;iBACAhC,OACAlD,KAAA4I,cAAA,GACAtG,OAAAuG,UAAA,GACAH,OAAAf,MAAAnE,IAAAkD,aAAA,QACA,IAAAc,UAAA,aAAAA,UAAAY,kBAAAG,SACAb,OAAArC,SAAArF,KAAAqC,OAAAuF;gBACApE,GAAAoE,OAAApE;gBAAA0B,GAAA0C,OAAA1C,IAAAwB,aAAA;;gBACAlD,GAAAmE,MAAAnE,IAAAkD,aAAA;gBAAAxB,GAAA0C,OAAA1C,IAAAwB,aAAA;;gBACAlD,GAAAmE,MAAAnE,IAAAkD,aAAA;gBAAAxB,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C;iBACAhC,OACAlD,KAAA8I,eAAA,GACAxG,OAAAuG,UAAA,GACAH,OAAAd,OAAApE,IAAAkD,aAAA,QACA,eAAAc,UAAAY,kBAAAG,SAAA;gBACA,IAAAQ,QAAAjB,KAAAtE,IAAAkD,aAAA;gBACAyB,WAAA3E,IAAAsE,KAAAtE,MACAuF,QAAAZ,WAAA3E,IAAAkD,aAAA,IAEAgB,OAAArC,SAAArF,KAAAqC,OAAAyF;oBACAtE,GAAAuF;oBAAA7D,GAAA4C,KAAA5C;;oBACA1B,GAAAuF;oBAAA7D,GAAA+C,UAAA/C,IAAAwB,aAAA;;oBACAlD,GAAAyE,UAAAzE;oBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;oBACAlD,GAAAyE,UAAAzE;oBAAA0B,GAAA+C,UAAA/C;qBACAhC,OACAlD,KAAAgJ,aAAA,GACA1G,OAAAuG,UAAA,GACAH,OAAAZ,KAAAtE;mBACA,WAAAgE,UACAE,OAAArC,SAAArF,KAAAqC,OAAAyF;gBACAtE,GAAAyE,UAAAzE,KAAAsE,KAAAtE,IAAAyE,UAAAzE,KAAA;gBAAA0B,GAAA4C,KAAA5C;;gBACA1B,GAAAyE,UAAAzE,KAAAsE,KAAAtE,IAAAyE,UAAAzE,KAAA;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C;iBACAhC,OACAlD,KAAAgJ,aAAA,GACA1G,OAAAuG,UAAA,GACAH,OAAAZ,KAAAtE,KACA,UAAAgE,WACAE,OAAArC,SAAArF,KAAAqC,OAAAwF;gBACArE,GAAAqE,IAAArE;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C;iBACAhC,OACAlD,KAAAiJ,YAAA,GACA3G,OAAAuG,UAAA,GACAH,OAAAb,IAAArE,SAvEAkE,OAAArC,SAAArF,KAAAqC,OAAAuF;gBACApE,GAAAoE,OAAApE;gBAAA0B,GAAA0C,OAAA1C,IAAAwB,aAAA;;gBACAlD,GAAAoE,OAAApE,KAAAoE,OAAApE,IAAAyE,UAAAzE,KAAA;gBAAA0B,GAAA0C,OAAA1C,IAAAwB,aAAA;;gBACAlD,GAAAoE,OAAApE,KAAAoE,OAAApE,IAAAyE,UAAAzE,KAAA;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C;iBACAhC,OACAlD,KAAA8I,eAAA,GACAxG,OAAAuG,UAAA,GACAH,OAAAd,OAAApE,KAAAoE,OAAApE,IAAAyE,UAAAzE,KAAA,QAnBAkE,OAAArC,SAAArF,KAAAqC,OAAAuF;gBACApE,GAAAoE,OAAApE;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C;iBACAhC,OACAlD,KAAA8I,eAAA,GACAxG,OAAAuG,UAAA,GACAH,OAAAd,OAAApE,GACAyE,UAAAzE,IAAAkF,gBAAAT,UAAAzE,SA1BAkE,OADA1H,KAAAkJ,WAAAX,UACAlD,SAAArF,KAAAqC,OAAAuF;gBACApE,GAAAoE,OAAApE;gBAAA0B,GAAA0C,OAAA1C,IAAAwB,aAAA;;gBACAlD,GAAAoE,OAAApE,KAAAoE,OAAApE,IAAAyE,UAAAzE,KAAA;gBAAA0B,GAAA0C,OAAA1C,IAAAwB,aAAA;;gBACAlD,GAAAoE,OAAApE,KAAAoE,OAAApE,IAAAyE,UAAAzE,KAAA;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C;iBACAhC,QAEAmC,SAAArF,KAAAqC,OAAAuF;gBACApE,GAAAoE,OAAApE;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C;iBACAhC,OAEAlD,KAAA8I,eAAA,GACAxG,OAAAuG,UAAA,GACAH,OAAAd,OAAApE,KAAAoE,OAAApE,IAAAyE,UAAAzE,KAAA,QA3BAkE,OAAArC,SAAArF,KAAAqC,OAAAsF;gBACAnE,GAAAmE,MAAAnE,IAAAkD,aAAA;gBAAAxB,GAAAyC,MAAAzC;;gBACA1B,GAAAmE,MAAAnE,IAAAkD,aAAA;gBAAAxB,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C;iBACAhC,OACAlD,KAAA4I,cAAA,GACAtG,OAAAuG,UAAA,GACAH,OAAAf,MAAAnE,IAAAkD,aAAA,QAlBAgB,OAAArC,SAAArF,KAAAqC,OAAAsF;gBACAnE,GAAAmE,MAAAnE,IAAAkD,aAAA;gBAAAxB,GAAAyC,MAAAzC;;gBACA1B,GAAAmE,MAAAnE,IAAAkD,aAAA;gBAAAxB,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C,IAAAwB,aAAA;;gBACAlD,GAAAyE,UAAAzE;gBAAA0B,GAAA+C,UAAA/C;iBACAhC,OACAlD,KAAA4I,cAAA,GACAtG,OAAAuG,UAAA,GACAH,OAAAf,MAAAnE,IAAAkD,aAAA,QAbAgB,OAAArC,SAAArF,KAAAqC,OAAAyF,MAAAI,aAAAhF;YACAlD,KAAAgJ,aAAA,GACA1G,OAAA6G,YAAA,GACAT,OAAAR,YAAA1E,QARAkE,OAAArC,SAAArF,KAAAqC,OAAAsF,OAAAQ,YAAAjF;YACAlD,KAAA4I,cAAA,GACAtG,OAAA4G,WAAA,GACAR,OAAAP,WAAA3E,QARAkE,OAAArC,SAAArF,KAAAqC,OAAAuF,QAAAK,WAAA/E;YACAlD,KAAA8I,eAAA,GACAxG,OAAAuG,UAAA,GACAH,OAAAd,OAAApE;YA4IA;YAJAxD,KAAA6C,UAAAP,OAAAQ,QAAA4E,QACAA,KAAApE,KAAAtD,KAAA6C,UAAAP,OAAAQ,OAGA4E,MAAA;gBACA,SAAA0B,IAAA,GAAAC,OAAArJ,KAAAqC,MAAAiH,MAAA/E,QAAA6E,IAAAC,MAAAD,KAOA,SALApC,KADAuC,YAAAvJ,KAAAqC,MAAAiH,MAAAF,IAGAI,QAAAD,UAAAjG,KAAA,SACAmG,QAAA/B,KAAApE,KAAA,SAEAoG,KAAA,GAAAC,OAAAH,MAAAjF,SAAA,GAAAmF,KAAAC,MAAAD,MAAA;oBACA,IAAAE;oBACAA,QAAAhF,OAAA,KAAA4E,MAAAE,IAAA,IAAAF,MAAAE,IAAA,OACAE,QAAAhF,OAAA,KAAA4E,MAAAE,KAAA,OAAAF,MAAAE,KAAA;oBAOA,SALAG,eAAAD,QAAA,OACAE,eAAAF,QAAA,OACAG,aAAAH,QAAA,OACAI,aAAAJ,QAAA,OAEAK,KAAA,GAAAC,QAAAT,MAAAlF,SAAA,GAAA0F,KAAAC,OAAAD,MAAA;wBACA,IAAAE;wBACAA,YAAAvF,OAAA,KAAA6E,MAAAQ,IAAA,IAAAR,MAAAQ,IAAA,OACAE,YAAAvF,OAAA,KAAA6E,MAAAQ,KAAA,OAAAR,MAAAQ,KAAA;wBAEA,IAAAG,eAAAD,YAAA,OACAE,eAAAF,YAAA,OACAG,aAAAH,YAAA,OACAI,aAAAJ,YAAA,OAEAK,MAAAlF,sBAAAuE,cAAAC,cAAAC,YAAAC,YAAAI,cAAAC,cAAAC,YAAAC;wBACA,IAAAC,IAAAC,WAAAD,IAAAE,SAAA;4BAEA,IAAAC;4BACAN,iBAAAE,aACAH,eAAAE,cACAK,eAAA,KAAAH,IAAAhH,IAAA,IAAAmF,UAAA0B;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAH,IAAAhH,IAAA,IAAAmF,UAAA0B,cAAAG,IAAAhH,GAAA6G,eAAA,IAAA1B,UAAA6B,IAAAhH,IAAA,IAAAmF,UAAA0B;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACAjD,KAAApE,KAAA,QAAAmG,WAEAkB,eAAA,KAAAH,IAAAhH,IAAA,IAAAmF,UAAA0B;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAH,IAAAhH,IAAA,IAAAmF,UAAA0B,cAAAG,IAAAhH,GAAA6G,eAAA,IAAA1B,UAAA6B,IAAAhH,IAAA,IAAAmF,UAAA0B;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACAjD,KAAApE,KAAA,QAAAmG,UAGAY,eAAAE,cACAI,eAAA,KAAAP,cAAAI,IAAAtF,IAAA,IAAAyD;4BACAc,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAP,cAAAI,IAAAtF,IAAA,IAAAyD,UAAAyB,eAAA,IAAAzB,UAAA6B,IAAAtF,GAAAkF,cAAAI,IAAAtF,IAAA,IAAAyD;4BACAc,MAAAmB,OAAAX,KAAA,MAAAU,aACAjD,KAAApE,KAAA,QAAAmG,WAEAkB,eAAA,KAAAP,cAAAI,IAAAtF,IAAA,IAAAyD;4BACAc,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAP,cAAAI,IAAAtF,IAAA,IAAAyD,UAAAyB,eAAA,IAAAzB,UAAA6B,IAAAtF,GAAAkF,cAAAI,IAAAtF,IAAA,IAAAyD;4BACAc,MAAAmB,OAAAX,KAAA,MAAAU,aACAjD,KAAApE,KAAA,QAAAmG,SAIAQ,MAAA,GACAjD,OAAA;;;;gBAMAhH,KAAAqC,MAAAiH,MAAA1E,KAAA8C,QACAzE,WAAAjD,KAAAqC,MAAAwI,mBAAA7K,KAAAqC,MAAAwI,kBAAA/C,KAAAtE,OACAxD,KAAAqC,MAAAwI,kBAAA/C,KAAAtE;;cAIAxD,KAAAqC,MAAAyI,gBAAA9K,KAAAqC,MAAAyI,gBAAApC,OAAA1I,KAAAqC,MAAAyI,kBACA9K,KAAAqC,MAAAyI,eAAApC;WAIAhJ,OAAAD,UAAA2C;;;;;;IJoJM,SAAU1C,QAAQD;QKjpBxB,SAAAsL,SAAA1I,OAAA2I,UAAAC;YACA,IAAAlL,GAAAiH,KACAkE,OAAA;YACA,KAAAnL,IAAA,GAAAiH,MAAA,IAAAiE,OAAA1G,SAAA,GAAAxE,IAAAiH,KAAAjH,KAAA,GACAmL,QAAA,QAAAnL,IAAA,SAAAA,IAAA;YAEA,IAAAoL,eAAAH,SAAAxH,GAAAwH,SAAA9F;YACA,KAAAnF,IAAA,GAAAiH,MAAAiE,OAAA1G,QAAAxE,IAAAiH,KAAAjH,KACAoL,WAAAvG,KAAAqG,OAAAlL,GAAAyD,IACA2H,WAAAvG,KAAAqG,OAAAlL,GAAAmF;YAEA,IAAA5C,SAAAD,MAAAG,MAAA0I,WAAAC;YACA7I,OAAAgB,KAAA,UAAAjB,MAAApB,QAAA,mBACAqB,OAAAgB,KAAA,gBAAAjB,MAAApB,QAAA;YAEA,IAAA0C,OAAAtB,MAAApB,QAAA0C,MACAC,QAAAvB,MAAApB,QAAA,gBACA4C,QAAAxB,MAAApB,QAAA;YAMA,OAJA0C,QAAArB,OAAAgB;gBAAAK;gBACAC,SAAAtB,OAAAgB;gBAAAQ,eAAAF;gBACAC,SAAAvB,OAAAgB;gBAAAS,eAAAF;gBAEAvB;;QAGA,SAAA+C,SAAAhD,OAAA+I,MAAAC,IAAAnI;YACA,IAAAnD,GAAAiH;YAEA,qBAAAxF,OAAAE,UAAA4J,SAAA9K,KAAA6K,QACAA;YAGA,IAAAH,OAAA;YACA,KAAAnL,IAAA,GAAAiH,MAAA,IAAAqE,GAAA9G,SAAA,GAAAxE,IAAAiH,KAAAjH,KAAA,GACAmL,QAAA,QAAAnL,IAAA,SAAAA,IAAA;YAEA,IAAAoL,eAAAC,KAAA5H,GAAA4H,KAAAlG;YACA,KAAAnF,IAAA,GAAAiH,MAAAqE,GAAA9G,QAAAxE,IAAAiH,KAAAjH,KACAoL,WAAAvG,KAAAyG,GAAAtL,GAAAyD,IACA2H,WAAAvG,KAAAyG,GAAAtL,GAAAmF;YAGA,IAAAwC,OAAArF,MAAAG,MAAA0I,WAAAC;YACAzD,KAAApE;gBACAwB,QAAAzC,MAAApB,QAAA;gBACA8D,gBAAA1C,MAAApB,QAAA;gBACAsK,aAAAlJ,MAAApB,QAAA;;YAGA,IAAA0C,OAAAtB,MAAApB,QAAA0C,MACAC,QAAAvB,MAAApB,QAAA,gBACA4C,QAAAxB,MAAApB,QAAA;YAMA,IAJA0C,QAAA+D,KAAApE;gBAAAK;gBACAC,SAAA8D,KAAApE;gBAAAQ,eAAAF;gBACAC,SAAA6D,KAAApE;gBAAAS,eAAAF;gBAEAX,MAAA;gBAEA,IAAAsI,cAAA,GAEAC,WAAApJ,MAAAG,MAAAU,KAAA,MAAAA,OAEAwI,gBAAA,GACAC,UAAAN,GAAA;gBAEAD,KAAAlG,MAAAyG,QAAAzG,MACAwG,gBAAA;gBAGA,IAAAlI,IAAA,GACA0B,IAAA;gBAEAsG,cAEAhI,IADA4H,KAAA5H,IAAAmI,QAAAnI,IACA4H,KAAA5H,KAAA4H,KAAA5H,IAAAmI,QAAAnI,KAAA,IAEAmI,QAAAnI,KAAAmI,QAAAnI,IAAA4H,KAAA5H,KAAA;gBAIA0B,IADAkG,KAAAlG,IAAAyG,QAAAzG,IACAkG,KAAAlG,KAAAkG,KAAAlG,IAAAyG,QAAAzG,KAAA,IAEAyG,QAAAzG,KAAAyG,QAAAzG,IAAAkG,KAAAlG,KAAA;gBAGAwG,gBACAlI,KAAAiI,SAAAhH,UAAAC,QAAA,GACAQ,KAAA7C,MAAApB,QAAA,mBAEAuC,KAAAnB,MAAApB,QAAA;gBACAiE,KAAAuG,SAAAhH,UAAAO,SAAA,OAGAxB,IAAA4H,KAAA5H,GACA0B,IAAAkG,KAAAlG,GAEAwG,gBACAlI,KAAAnB,MAAApB,QAAA;gBACAiE,KAAA7C,MAAApB,QAAA,mBAEAuC,KAAAnB,MAAApB,QAAA,oBACAiE,KAAA7C,MAAApB,QAAA;gBACAmK,KAAAlG,IAAAyG,QAAAzG,MACAA,KAAA,IAAA7C,MAAApB,QAAA,mBAKAwK,SAAAnI;oBACAC,eAAA;oBACAG,aAAArB,MAAApB,QAAA;oBACAwC,MAAApB,MAAApB,QAAA;oBACAuC;oBACA0B;oBAGAvB,QAAA8H,SAAAnI;oBAAAK;oBACAC,SAAA6H,SAAAnI;oBAAAQ,eAAAF;oBACAC,SAAA4H,SAAAnI;oBAAAS,eAAAF;;;YAGA,OAAA6D;;QAGA,SAAApC,sBAAAsG,aAAAC,aAAAC,WAAAC,WAAAC,aAAAC,aAAAC,WAAAC;;YAEA,IAAAC,aAAAtM,GAAAuM,GAAAC,YAAAC,YAAAC;gBACAhJ,GAAA;gBACA0B,GAAA;gBACAuF,UAAA;gBACAC,UAAA;;;;;;;;;;YAGA,OADA0B,eAAAD,YAAAF,gBAAAH,YAAAF,gBAAAM,YAAAF,gBAAAD,YAAAF;YACA,MAAAO,cACAI,UAEA1M,IAAA+L,cAAAI,aACAI,IAAAT,cAAAI;YACAM,cAAAJ,YAAAF,eAAAlM,KAAAqM,YAAAF,eAAAI,GACAE,cAAAT,YAAAF,eAAA9L,KAAAiM,YAAAF,eAAAQ;YACAvM,IAAAwM,aAAAF,aACAC,IAAAE,aAAAH,aAGAI,OAAAhJ,IAAAoI,cAAA9L,KAAAgM,YAAAF;YACAY,OAAAtH,IAAA2G,cAAA/L,KAAAiM,YAAAF,cAOA/L,IAAA,KAAAA,IAAA,MACA0M,OAAA/B,WAAA;YAGA4B,IAAA,KAAAA,IAAA,MACAG,OAAA9B,WAAA,IAGA8B;;QAGA9M,OAAAD;YACAsL;YACA1F;YACAC;;;;;;;IL4pBM,SAAU5F,QAAQD,SAASU;QM3zBjC,SAAAS,MAAA6L;YA6IA,SAAAC,SAAAC;gBACA,IAAAC,aAAAD,EAAAlF,QAAA,UACAoF,WAAAF,EAAAlF,QAAA;gBACA,OAAAmF,cAAA,KAAAC,YAAA,IACAF,EAAAhI,UAAAiI,YAAAC,YAEA;;YAGA,SAAAC,aAAAH;gBACA,IAAAC,aAAAD,EAAAlF,QAAA,UACAoF,WAAAF,EAAAlF,QAAA;gBACA,OAAAmF,cAAA,KAAAC,YAAA,IACAF,EAAAhI,UAAAiI,YAAAC,YAEA;;YAGA,SAAAE,UAAAJ;gBACA,IAAAC,aAAAD,EAAAlF,QAAA,UACAoF,WAAAF,EAAAlF,QAAA;gBACA,OAAAmF,cAAA,KAAAC,YAAA,IACAxK,MAAAsD,QAAAgH,EAAAhI,UAAA,GAAAiI,aAAA,MAEAvK,MAAAsD,QAAAgH;;YAGA,SAAAK,YAAAL;gBACA,IAAA3J,OAAA,QACA4J,aAAAD,EAAAlF,QAAA,UACAoF,WAAAF,EAAAlF,QAAA;gBASA,OARAmF,cAAA,KAAAC,YAAA,MACA7J,OAAAiK,SAAAtI,UAAAiI,YAAAC;gBACA7J,KAAAyE,QAAA,YACA,UAAAzE,QAAA,SAAAA,SACAA,OAAA,WAAAA;gBAIAA;;YAnLAyJ,iBAAA,IACAA,cAAAS;YAmHA,SAjHA7K;gBACAsD;gBACAwH,OAAA;gBACAC,SAAA,SAAAC,WAAApM;oBAWA,SAAAqM,iBAAAX;wBACA,IAAAY,YAAAZ,EAAA7J,MACA,OAAAyK,YAAAZ,EAAA7J;wBAGA,QAAA6J,EAAAhK;0BACA;4BACA4K,YAAAZ,EAAA7J,OAAA,IAAA0K,MAAAC,SAAAd;4BACA;;0BACA;4BACAY,YAAAZ,EAAA7J,OAAA,IAAA4K,IAAAD,SAAAd;4BACA;;0BACA;4BACAY,YAAAZ,EAAA7J,OAAA,IAAA6K,UAAAF,SAAAd;4BACA;;0BACA;4BACAY,YAAAZ,EAAA7J,OAAA,IAAA8K,YAAAH,SAAAd;4BACA;;0BACA;4BACAY,YAAAZ,EAAA7J,OAAA,IAAA+K,WAAAJ,SAAAd;4BACA;;0BACA;4BACAY,YAAAZ,EAAA7J,OAAA,IAAAgL,UAAAL,SAAAd;4BACA;;0BACA;4BACAY,YAAAZ,EAAA7J,OAAA,IAAAiL,SAAAN,SAAAd;4BACA;;0BACA;4BACA,WAAAqB,MAAA;;wBAGA,OAAAT,YAAAZ,EAAA7J;;oBAzCA,IAAA2D,OAAAzG;oBAEAA,KAAAyN,WACAzN,KAAAyN,QAAAQ;oBAGA,IAAAR,UAAA,IAAA5M,UAAAwM,WAAApM;oBACAjB,KAAAyN;oBACA,IAAAF;qBAoCA,SAAAW,eAAAvB,GAAAwB,UAAAC;wBACA,IAAAC,WAAAf,iBAAAX;wBA2BA,OAzBAlG,KAAA0G,UAAAR,IACAc,QAAAa,UAAAD,YACAF,YAAAC,SAAAD,SAAAI,WACAJ,oBAAA,aACAC,KAAAI,QAAA7B,KACAwB,SAAAK,IAAAH;wBAEAD,KAAAK,OAAA9B,KACAwB,SAAAM,GAAAJ,aAEAF,oBAAA,YACAC,KAAAM,UAAA/B,KACAwB,SAAAO,MAAAL;wBAEAD,KAAAO,UAAAhC,KACAwB,SAAAQ,MAAAN,WAEAD,KAAAQ,UAAAjC,KACAwB,SAAAS,MAAAP,aAGAF,SAAAU,KAAAR;wBAIAA,SAAAE,SACAF,YAGAA,oBAAA,aACA1B,EAAA6B,OACAN,eAAAvB,EAAA6B,KAAAH,UAAA1B;wBAEAA,EAAA8B,MACAP,eAAAvB,EAAA8B,IAAAJ,UAAA1B,MAEA0B,oBAAA,YACA1B,EAAA+B,SACAR,eAAAvB,EAAA+B,OAAAL,UAAA1B;wBAEAA,EAAAgC,SACAT,eAAAvB,EAAAgC,OAAAN,UAAA1B,IAEAA,EAAAiC,SACAV,eAAAvB,EAAAiC,OAAAP,UAAA1B,MAEAA,EAAA3J,QACAkL,eAAAvB,EAAA3J,MAAAqL,UAAA1B;wBAGA0B;sBACArO,KAAAmN,QAEAM,QAAAjH;;gBAEAyH,OAAA;oBACAjO,KAAAyN,QAAAQ;;eAIA3E,YACAwF,YAAA,GACAC,KAAA,GAAAC,QAAAvC,MAAAlI,QAAAwK,KAAAC,OAAAD,MACA,aAAAtC,MAAAsC,OAAA,SAAAtC,MAAAsC,KAAA;gBACA,IAAAE,QAAAxC,MAAA9H,UAAAmK,WAAAC;gBACAD,YAAAC,KAAA,GACAzF,MAAA1E,KAAAqK,MAAAC,QAAA;;YAIAJ,YAAArC,MAAAlI,UACA+E,MAAA1E,KAAA6H,MAAA0C,OAAAL;YAGA,SAAA1F,IAAA,GAAApC,MAAAsC,MAAA/E,QAAA6E,IAAApC,OAAA;gBACA,IAAAoI,cAAA9F,MAAAF;gBAEAgG,YAAA3H,QAAA,aAAA2H,YAAA3H,QAAA,aAAA2H,YAAA3H,QAAA,aACA6B,MAAAF,IAAA,aAAAgG;gBACA9F,MAAAsB,OAAAxB,GAAA,IACApC,SAEAoC;;YA8CA,MAAAE,MAAA/E,SAAA;gBACA,IAAAmD,OAAA4B,MAAAsB,OAAA,SAAAsC;gBAEA,IAAAxF,KAAAD,QAAA;;oBAEA,IAAA4H,QAAA3H,KAAAtD,MAAA,OACA9B;wBACAQ,KAAAuM,MAAA,GAAAH,QAAA;wBACAvM,YAAA0M,MAAA;wBACAnM,MAAA;wBACAc,MAAA;wBACAC,QAAA;wBACArB,WAAA;wBACAC;wBACAyM;uBAIAA,SAAAD,MAAA,GAAAE,MAAA;oBACA,IAAAD,iBAAA/K,SAAA,GAEA,SADAiL,UAAAF,OAAA,GAAAlL,MAAA,MACArE,IAAA,GAAAA,IAAAyP,QAAAjL,QAAAxE,KAAA;wBACA,IAAA0P,QAAAD,QAAA,GAAApL,MAAA;wBACA,KAAAqL,MAAAlL,WACAjC,OAAAgN,OAAAG,MAAA,MAAAA,MAAA;;oBAKA,IAAAC;;oBAuBA,IArBApN,OAAAK,WAAA8E,QAAA,eACAiI,MAAApN,OAAAK,WAAAyB,MAAA;oBACA9B,OAAAK,aAAA+M,IAAA7I,SACAvE,OAAAY,OAAAwM,IAAAC,KAAA,QAGArN,OAAAY,QAAAZ,OAAAY,KAAAuE,QAAA,cACAiI,MAAApN,OAAAY,KAAAkB,MAAA;oBACA9B,OAAAY,OAAAwM,IAAA7I,SACAvE,OAAA0B,OAAA0L,IAAAC,KAAA,SACArN,OAAAK,WAAA8E,QAAA,eACAiI,MAAApN,OAAAK,WAAAyB,MAAA;oBACA9B,OAAAK,aAAA+M,IAAA7I,SACAvE,OAAA0B,OAAA0L,IAAAC,KAAA,QAGArN,OAAAK,WAAA8E,QAAA,eACAnF,OAAAK,aAAAL,OAAAK,WAAAyB,MAAA;oBAIA9B,OAAA0B,MAAA;wBACA,IAAA4I,aAAAtK,OAAA0B,KAAAyD,QAAA,UACAoF,WAAAvK,OAAA0B,KAAAyD,QAAA;wBACAmF,cAAA,KAAAC,YAAA,MACAvK,OAAA2B,SAAA3B,OAAA0B,KAAAW,UAAAiI,YAAAC;wBACAvK,OAAA0B,OAAA1B,OAAA0B,KAAAW,UAAA,GAAAiI,aAAA;;;;oBAMA,IAAAtK,OAAAY,QACAZ,OAAAY,KAAAuE,QAAA;wBACA,IAAAmI,cAAAtN,OAAAY,KAAAkB,MAAA;wBACA9B,OAAAM,YAAAgN,YAAAC,MAAA3C,QACA5K,OAAAY,OAAA0M,YAAAD,KAAA;;;oBAKAtN,MAAAsD,QAAArD,OAAAQ,OAAAR;uBAEA,IAAAoF,KAAAD,QAAA,YAGA,SADAqI,cAAApI,KAAAtD,MAAA,OACArE,IAAA,GAAAgQ,OAAAD,YAAAvL,QAAAxE,IAAAgQ,MAAAhQ,KAAA;oBACA,IAAAkN,WAAA6C,YAAA/P,IACAiQ,UAAAlD,aAAAG;oBAEA,WAAA+C,WAAA,YAAAA;oBAEA/C,oBAAAiC,QAAA,gBACAjC,oBAAAiC,QAAA;oBAGA,IAAAe,WAAAlD,UAAAE,WACAjK,OAAAgK,YAAAC,WAEAiD,YAAA;oBACA,IAAAlN,KAAAyE,QAAA;wBACA,IAAA0I,UAAAnN,KAAAoB,MAAA;wBACApB,OAAAmN,QAAA,IACAD,YAAAC,QAAA,GAAAjD;;oBAOA,IAJA7K,MAAA8K,UACA9K,MAAA8K,QAAA8C,WAGAlQ,IAAA,IAAAgQ,MAAA;wBACA,IAAAK,WAAAN,YAAA/P,IAAA;wBACAkQ,SAAAjN,QAAA+J,UAAAqD,WACAH,SAAA,eAAAjN,QAAAkN;wBACAA,YAAA;;uBAGA,IAAAxI,KAAAD,QAAA,YAIA,SADA4I,mBAAA3I,KAAAtD,MAAA,OACArE,IAAA,GAAAgQ,OAAAM,iBAAA9L,QAAAxE,IAAAgQ,MAAAhQ,KACA,IAAAA,IAAA,KAAAgQ,MAAA;oBACA,IAAAO,UAAAvD,UAAAsD,iBAAAtQ,KACAqQ,WAAArD,UAAAsD,iBAAAtQ,IAAA;oBAEAuQ,QAAA,UAAAF,SAAAtN,OAAAyN,KAAA3P,MAAA8L,SAAA2D,iBAAAtQ,IAAA;;;YAMA,OAAAsC;;QA3TA,IAAAxB,YAAAV,6CAAA,IACAqN,QAAArN,oDAAA,KACAuN,MAAAvN,kDAAA,KACAwN,YAAAxN,wDAAA,KACAyN,cAAAzN,0DAAA,KACA0N,aAAA1N,yDAAA,KACA2N,YAAA3N,wDAAA,IACA4N,WAAA5N,uDAAA;QAuTAT,OAAAD,UAAAmB;;;;;;IN60BM,SAAUlB,QAAQD,SAASU;QOtoCjC,SAAA2N,UAAAzL,OAAApB;YACAA,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,UACAjB,KAAAwQ,aAAAxQ,KAAAqD,QAAA;YACArD,KAAAyQ,gBAAA,UACAzQ,KAAA0Q,eAAA,SACA1Q,KAAAsP,SAAArO,QAAAqO;YACArO,QAAAuN,OAAAvN,QAAA0P,iBAAA1P,QAAAwN,OAAAxN,QAAA2P,eACA,YAAA3P,QAAA0P,iBACA3Q,KAAA0Q,eAAA;YACA1Q,KAAAyQ,gBAAA,WACA,UAAAxP,QAAA0P,iBACA3Q,KAAA0Q,eAAA;YACA1Q,KAAAyQ,gBAAA,UAEAzQ,KAAA0Q,eAAA,SACA1Q,KAAAyQ,gBAAA,YAEAxP,QAAAuN,QAAAvN,QAAA0P,iBAAA1P,QAAAwN,MAAAxN,QAAA2P,eACA,YAAA3P,QAAA2P,gBACA5Q,KAAAyQ,gBAAA;YACAzQ,KAAA0Q,eAAA,YAEA1Q,KAAAyQ,gBAAA,SACAzQ,KAAA0Q,eAAA,YAEAzP,QAAAuN,OAAAvN,QAAA0P,iBAAA1P,QAAAwN,MAAAxN,QAAA2P,gBAAA3P,QAAA2P,iBAAA3P,QAAA0P,gBACA,YAAA1P,QAAA0P,iBACA3Q,KAAA0Q,eAAA;YACA1Q,KAAAyQ,gBAAA,WACA,UAAAxP,QAAA0P,iBACA3Q,KAAA0Q,eAAA;YACA1Q,KAAAyQ,gBAAA,UAEAzQ,KAAA0Q,eAAA,SACA1Q,KAAAyQ,gBAAA,aAGAzQ,KAAAyQ,gBAAA;YACAzQ,KAAA0Q,eAAA,UAGA1Q,KAAAyQ,gBAAAzQ,KAAAyQ,iBAAA;YACAzQ,KAAA0Q,eAAA1Q,KAAA0Q,gBAAA,SAEA1Q,KAAAkD,KAAAI;gBACAE,GAAA,IAAAxD,KAAAwQ;;YAGA,IAAA9L,QAAA1E,KAAAkD,KAAAuB,UAAAC,QAAA,IAAA1E,KAAAwQ;YACA9L,iBAAA;YACA,IAAAM,SAAAhF,KAAAkD,KAAAuB,UAAAO,SAAA,IAAAhF,KAAAwQ;YACAxL,mBAAA,GACAA,SAAAkC,KAAA2J,IAAA,KAAAnM,OAAAM;YACA,IAAA8L,SAAApM,QAAA,GACAqM,SAAA/L,SAAA;YAEAhF,KAAAkD,KAAAI;gBACAE,GAAAsN,SAAA9Q,KAAAwQ,aAAA;;YAGA,IAAArD;gBAAA3J,GAAAsN;gBAAA5L,GAAA6L;eACA9F;gBACAzH,GAAAsN,SAAApM,QAAA;gBAAAQ,GAAA6L,SAAA/L,SAAA;;gBACAxB,GAAAsN,SAAApM,QAAA,IAAAA,QAAA;gBAAAQ,GAAA6L,SAAA/L,SAAA,IAAAA,SAAA;;gBACAxB,GAAAsN,SAAApM,QAAA,IAAAA;gBAAAQ,GAAA6L,SAAA/L,SAAA;;gBACAxB,GAAAsN,SAAApM,QAAA,IAAAA,QAAA;gBAAAQ,GAAA6L,SAAA/L,SAAA,IAAAA,SAAA;;gBACAxB,GAAAsN,SAAApM,QAAA;gBAAAQ,GAAA6L,SAAA/L,SAAA;iBAGA1C,SAAAyI,SAAA1I,OAAA8K,OAAAlC;YAEA3I,OAAAgB;gBACAwB,QAAA9E,KAAAqD,QAAA;gBACA0B,gBAAA/E,KAAAqD,QAAA;gBACAI,MAAAzD,KAAAqD,QAAA;gBAEApC,QAAA+C,QAAA1B,OAAAgB,KAAA,QAAArC,QAAA+C,OACA/C,QAAAgD,UAAA3B,OAAAgB,KAAA,UAAArC,QAAAgD;YACAhD,QAAA6B,QAAAR,OAAAa,KAAA7C,KAAAW,QAAA6B,MACAR,OAAAa,KAAAC,aAAA,SAAApD,KAAAqD,QAAA;YAEArD,KAAAkD,KAAAI;gBACA4B,GAAA5C,OAAAmC,UAAAO,SAAA;gBAGAhF,KAAAuC,MAAAqC,KAAAtC,SACAA,OAAA2C,aAAAjF,KAAAkD,OAEAlD,KAAAmF;;QA9FA,IAAA/C,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC,UACAiD,UAAAjF,iDAAA,IACA4K,WAAA3F,QAAA2F;QA6FA5I,SAAA2L,WAAA1L,SAEA0L,UAAApM,UAAA8E,SAAA;YAEAxG,KAAAyQ,kBACAzQ,UAAAyQ,gBAAA,aAAAzQ,KAAAgR;YAGAhR,KAAA0Q,iBACA1Q,UAAA0Q,eAAA,aAAA1Q,KAAAiR;YAGA,IAAAvK,aAAA1G,KAAAqD,QAAA;YAEA,IAAArD,KAAAkR,eAAA;gBACA,IAAA7J,cAAArH,KAAAqG;gBAEArG,KAAAkR,cAAAtK,iBACA5G,KAAAkR,cAAAhL,OAAAlG,KAAA+F,SAAA/F,KAAAgF,SAAA0B;gBACA1G,KAAAkR,cAAAjL,KAAAoB,YAAA7D,IAAAxD,KAAAkR,cAAAxM,QAAA,IACA1E,KAAAkR,cAAAtK,gBAAA;gBAEA5G,KAAAkR,cAAA1K;;YAIA,IAAAxG,KAAAmR,cAAA;gBACA,IAAAxK,aAAA3G,KAAAuG;gBAEA,KAAAvG,KAAAmR,aAAAvK,cAAA;oBAEA5G,KAAAmR,aAAAhL,KAAAQ,WAAAzB,IAAAlF,KAAAmR,aAAAnM,SAAA,IACAhF,KAAAmR,aAAAnL,OAAAhG,KAAAuC,MAAAkC,UAAAjB,IAAAxD,KAAA0E,QAAAgC;oBAEA,IAAAD,OAAAzG;qBACA,SAAA6G;wBAGA,SADAC,MADAC,kBAAA,GAEAhH,IAAA,GAAAiH,MAAAP,KAAApE,MAAAsD,QAAApB,QAAAxE,IAAAiH,KAAAjH,KAGA,IAFA+G,OAAAL,KAAApE,MAAAsD,QAAA5F;yBAEA0G,KAAA6I,OAAA,0BAAA7I,KAAA6I,OAAA;4BACA,IAAArI,OAAAC,KAAAC,IAAAL,KAAAjB,YAAArC,IAAAiD,KAAA0K,aAAAtL,YAAArC;4BACA,IAAAsD,KAAAjB,YAAAX,IAAAuB,KAAA0K,aAAAtL,YAAAX,KAAA+B,QAAAR,KAAA0K,aAAAzM,QAAA;gCACAqC,kBAAA;gCACA;;;wBAKA,IAAAA,gBAAA;4BACA,cAAAN,KAAA0K,aAAAxO,YAAA;4BACA8D,KAAA0K,aAAAlL,KAAAa,KAAAhB,SAAAgB,KAAApC,QAAAgC,aACAG;;yBAIA7G,KAAAmR,aAAAvK,gBAAA,GAEA5G,KAAAmR,aAAA3K;;;WAKAsH,UAAApM,UAAA4F,cAAA;YACAtH,KAAAgR,cACAhR,KAAAuH,WAAAvH,KAAAgR,YAAAhR,KAAAqD,QAAA,aAAArD,KAAAyQ;YAGAzQ,KAAAiR,aACAjR,KAAAuH,WAAAvH,KAAAiR,WAAAjR,KAAAqD,QAAA,YAAArD,KAAA0Q;WAIAhR,OAAAD,UAAAqO;;;;;;IPqpCM,SAAUpO,QAAQD,SAASU;QQ5zCjC,SAAA4N,SAAA1L,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAA4O,KAAA;YACAnQ,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB,SACAtC,KAAAwQ,aAAAxQ,KAAAqD,QAAA;YACArD,KAAAqR,kBAAA,UACArR,KAAAsR,kBAAA,SACAtR,KAAAuR,kBAAA;YACAvR,KAAAsP,SAAArO,QAAAqO,QACA,YAAArO,QAAAuQ,mBAAAvQ,gBAAAuQ,mBAAAvQ,QAAA+B,SACA/B,gBAAAuQ,kBAAAvQ,QAAA+B;YAEA,YAAA/B,QAAAuQ,mBAAAvQ,gBAAAuQ,mBAAAvQ,QAAA+B,SACA/B,gBAAAuQ,kBAAAvQ,QAAA+B;YAEA,YAAA/B,QAAAuQ,mBAAAvQ,gBAAAuQ,mBAAAvQ,QAAA+B,SACA/B,gBAAAuQ,kBAAAvQ,QAAA+B;YAGA/B,QAAAyN,SAAAzN,QAAAwQ,mBAAAxQ,QAAA0N,UAAA1N,QAAAyQ,mBAAAzQ,QAAA2N,UAAA3N,QAAA0Q,kBACA,YAAA1Q,QAAAwQ,mBACAzR,KAAAsR,kBAAA;YACAtR,KAAAqR,kBAAA,SACArR,KAAAuR,kBAAA,SACA,UAAAtQ,QAAAwQ,mBACAzR,KAAAsR,kBAAA;YACAtR,KAAAqR,kBAAA,OACArR,KAAAuR,kBAAA,YACA,WAAAtQ,QAAAwQ,mBACAzR,KAAAsR,kBAAA;YACAtR,KAAAqR,kBAAA,QACArR,KAAAuR,kBAAA,aAEAvR,KAAAsR,kBAAA;YACAtR,KAAAqR,kBAAA,UACArR,KAAAuR,kBAAA,SAEAtQ,QAAAyN,UAAAzN,QAAAwQ,mBAAAxQ,QAAA0N,SAAA1N,QAAAyQ,mBAAAzQ,QAAA2N,UAAA3N,QAAA0Q,kBACA,YAAA1Q,QAAAyQ,mBACA1R,KAAAqR,kBAAA;YACArR,KAAAsR,kBAAA,SACAtR,KAAAuR,kBAAA,SACA,WAAAtQ,QAAAyQ,mBACA1R,KAAAqR,kBAAA;YACArR,KAAAsR,kBAAA,QACAtR,KAAAuR,kBAAA,YAEAvR,KAAAqR,kBAAA;YACArR,KAAAsR,kBAAA,UACAtR,KAAAuR,kBAAA,SAEAtQ,QAAAyN,UAAAzN,QAAAwQ,mBAAAxQ,QAAA0N,UAAA1N,QAAAyQ,mBAAAzQ,QAAA2N,SAAA3N,QAAA0Q,kBACA,YAAA1Q,QAAAyQ,mBACA1R,KAAAqR,kBAAA;YACArR,KAAAsR,kBAAA,OACAtR,KAAAuR,kBAAA,WACA,WAAAtQ,QAAAyQ,mBACA1R,KAAAqR,kBAAA;YACArR,KAAAsR,kBAAA,SACAtR,KAAAuR,kBAAA,WAEAvR,KAAAqR,kBAAA;YACArR,KAAAsR,kBAAA,UACAtR,KAAAuR,kBAAA,UAGAvR,KAAAqR,kBAAApQ,QAAAwQ;YACAzR,KAAAsR,kBAAArQ,QAAAyQ,iBACA1R,KAAAuR,kBAAAtQ,QAAA0Q;YAGA3R,KAAAqR,kBAAArR,KAAAqR,mBAAA,UACArR,KAAAsR,kBAAAtR,KAAAsR,mBAAA;YACAtR,KAAAuR,kBAAAvR,KAAAuR,mBAAA,OAEAvR,KAAAmF;;QA9EA,IAAA/C,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QA+EAA,SAAA4L,UAAA3L,SAEA2L,SAAArM,UAAA8E,SAAA;YAEAxG,KAAAqR,oBACArR,UAAAqR,kBAAA,aAAArR,KAAA4R;YAGA5R,KAAAsR,oBACAtR,UAAAsR,kBAAA,aAAAtR,KAAA6R;YAGA7R,KAAAuR,oBACAvR,UAAAuR,kBAAA,aAAAvR,KAAA8R;YAGA,IAAApL,aAAA1G,KAAAqD,QAAA;YAEA,IAAArD,KAAAkR,eAAA;gBACA,IAAA7J,cAAArH,KAAAqG;gBAEArG,KAAAkR,cAAAtK,iBACA5G,KAAAkR,cAAAhL,OAAAlG,KAAA+F,SAAA/F,KAAAgF,SAAA0B;gBACA1G,KAAAkR,cAAAjL,KAAAoB,YAAA7D,IAAAxD,KAAAkR,cAAAxM,QAAA,IACA1E,KAAAkR,cAAAtK,gBAAA;gBAEA5G,KAAAkR,cAAA1K;;YAIA,IAAAxG,KAAA+R,YAAA;gBACA,IAAAC,WAAAhS,KAAAoG;gBAEApG,KAAA+R,WAAAnL,iBACA5G,KAAA+R,WAAA7L,OAAAlG,KAAA+F,SAAA/F,KAAA+R,WAAA/M,SAAA0B;gBACA1G,KAAA+R,WAAA9L,KAAA+L,SAAAxO,IAAAxD,KAAA+R,WAAArN,QACA1E,KAAA+R,WAAAnL,gBAAA;gBAEA5G,KAAA+R,WAAAvL;;YAIA,IAAAC,OAAAzG;YAEA,IAAAA,KAAAiS,aAAA;gBACA,IAAA7K,YAAApH,KAAAsG;gBAEAtG,KAAAiS,YAAArL,iBACA5G,KAAAiS,YAAA9L,KAAAiB,UAAAlC,IAAAlF,KAAAiS,YAAAjN,SAAA;gBACAhF,KAAAiS,YAAAjM,SAAAhG,KAAAuC,MAAAkC,UAAAjB,IAAAxD,KAAA0E,QAAAgC,cACA,SAAAG;oBAGA,SADAC,MADAC,kBAAA,GAEAhH,IAAA,GAAAiH,MAAAP,KAAApE,MAAAsD,QAAApB,QAAAxE,IAAAiH,KAAAjH,KAGA,IAFA+G,OAAAL,KAAApE,MAAAsD,QAAA5F;qBAEA0G,KAAA6I,OAAA,0BAAA7I,KAAA6I,OAAA;wBACA,IAAArI,OAAAC,KAAAC,IAAAL,KAAAjB,YAAArC,IAAAiD,KAAAwL,YAAApM,YAAArC;wBACA,IAAAsD,KAAAjB,YAAAX,IAAAuB,KAAAwL,YAAApM,YAAAX,KAAA+B,QAAAR,KAAAwL,YAAAvN,QAAA;4BACAqC,kBAAA;4BACA;;;oBAKA,IAAAA,gBAAA;wBACA,cAAAN,KAAAwL,YAAAtP,YAAA;wBACA8D,KAAAwL,YAAAhM,KAAAa,KAAAhB,SAAAgB,KAAApC,QAAAgC,aACAG;;qBAIA7G,KAAAiS,YAAArL,gBAAA,GAEA5G,KAAAiS,YAAAzL;;YAIA,IAAAxG,KAAAmR,cAAA;gBACA,IAAAxK,aAAA3G,KAAAuG;gBAEAvG,KAAAmR,aAAAvK,iBACA5G,KAAAmR,aAAAhL,KAAAQ,WAAAzB,IAAAlF,KAAAmR,aAAAnM,SAAA;gBACAhF,KAAAmR,aAAAnL,OAAAhG,KAAAuC,MAAAkC,UAAAjB,IAAAxD,KAAA0E,QAAAgC,aACA,SAAAG;oBAGA,SADAC,MADAC,kBAAA,GAEAhH,IAAA,GAAAiH,MAAAP,KAAApE,MAAAsD,QAAApB,QAAAxE,IAAAiH,KAAAjH,KAGA,IAFA+G,OAAAL,KAAApE,MAAAsD,QAAA5F;qBAEA0G,KAAA6I,OAAA,0BAAA7I,KAAA6I,OAAA;wBACA,IAAArI,OAAAC,KAAAC,IAAAL,KAAAjB,YAAArC,IAAAiD,KAAA0K,aAAAtL,YAAArC;wBACA,IAAAsD,KAAAjB,YAAAX,IAAAuB,KAAA0K,aAAAtL,YAAAX,KAAA+B,QAAAR,KAAA0K,aAAAzM,QAAA;4BACAqC,kBAAA;4BACA;;;oBAKA,IAAAA,gBAAA;wBACA,cAAAN,KAAA0K,aAAAxO,YAAA;wBACA8D,KAAA0K,aAAAlL,KAAAa,KAAAhB,SAAAgB,KAAApC,QAAAgC,aACAG;;qBAIA7G,KAAAmR,aAAAvK,gBAAA,GAEA5G,KAAAmR,aAAA3K;;WAKAuH,SAAArM,UAAA4F,cAAA;YACAtH,KAAA4R,gBACA5R,KAAAuH,WAAAvH,KAAA4R,cAAA,IAAA5R,KAAAqR;YAGArR,KAAA6R,gBACA7R,KAAAuH,WAAAvH,KAAA6R,cAAA,IAAA7R,KAAAsR;YAGAtR,KAAA8R,gBACA9R,KAAAuH,WAAAvH,KAAA8R,cAAA,IAAA9R,KAAAuR;WAIA7R,OAAAD,UAAAsO;;;;;;IRw0CM,SAAUrO,QAAQD,SAASU;QSjhDjC,SAAAU,UAAAwM,WAAApM;YACAA,yBAEAjB,KAAAwC,QAAA,IAAA0P,QAAA7E,YAEArN,KAAAiB,UAAAiB,SAAAjB,SAAAC;YAEAlB,KAAA2F,cACA3F,KAAAsJ,YACAtJ,KAAAmN,QAAA;;QAfA,IAAA+E,UAAA/R,mCAAA,KACA+B,WAAA/B,+CAAA,GAAA+B,UACAhB,iBAAAf,gDAAA,IACA2N,YAAA3N,wDAAA,IACA4N,WAAA5N,uDAAA;QAcAU,UAAAa,UAAAyQ,SAAA,SAAA7P;YACAtC,KAAA2F,QAAA8B,QAAAnF,YAAA,KACAtC,KAAA2F,QAAAf,KAAAtC;YAGA,IAAA8P,YAAApS;YA+CA,OA7CAsC,kBAAA,aACAA,OAAAkM,MAAA,SAAA6D;gBAKA,OAJA/P,OAAA0O,aAAAqB,YACA/P,OAAA2O,cACA3O,OAAAiM,UAAA;gBAEA6D,UAAAD,OAAAE;eAEA/P,OAAAmM,KAAA,SAAA4D;gBAKA,OAJA/P,OAAA2O,YAAAoB,YACA/P,OAAA0O,eACA1O,OAAAiM,UAAA;gBAEA6D,UAAAD,OAAAE;iBAEA/P,kBAAA,YACAA,OAAAoM,QAAA,SAAA2D;gBAKA,OAJA/P,OAAAsP,eAAAS,YACA/P,OAAAuP,iBACAvP,OAAAiM,UAAA;gBAEA6D,UAAAD,OAAAE;eAEA/P,OAAAqM,QAAA,SAAA0D;gBAKA,OAJA/P,OAAAuP,eAAAQ,YACA/P,OAAAwP,iBACAxP,OAAAiM,UAAA;gBAEA6D,UAAAD,OAAAE;eAEA/P,OAAAsM,QAAA,SAAAyD;gBAKA,OAJA/P,OAAAwP,eAAAO,YACA/P,OAAAsP,iBACAtP,OAAAiM,UAAA;gBAEA6D,UAAAD,OAAAE;iBAGA/P,OAAAuM,OAAA,SAAAwD;gBAGA,OAFA/P,OAAAU,OAAAqP,YACA/P,OAAAiM,UAAA,GACA6D,UAAAD,OAAAE;eAIA/P;WAGAzB,UAAAa,UAAA4M,YAAA,SAAAhM;YAEA,OADAtC,KAAAmN,QAAA7K,QACAtC,KAAAmS,OAAA7P;WAGAzB,UAAAa,UAAA8E,SAAA;YACA,IAQAlE,QACAoF,MATAxD,WAAA,GACAoO,YAAA,GACAvS,IAAA,GACAiH,MAAA,GACA0B,OAAA,GACA6J,OAAA,GACAC,OAAA,GACAC,OAAA;YAIA,KAAA1S,IAAA,GAAAiH,MAAAhH,KAAA2F,QAAApB,QAAAxE,IAAAiH,KAAAjH,KACAuC,SAAAtC,KAAA2F,QAAA5F,IACAuC,OAAAoC,QAAAR,aACAA,WAAA5B,OAAAoC;YAEApC,OAAA0C,SAAAsN,cACAA,YAAAhQ,OAAA0C;YAIA,KAAAjF,IAAA,GAAAiH,MAAAhH,KAAA2F,QAAApB,QAAAxE,IAAAiH,KAAAjH,KACAuC,SAAAtC,KAAA2F,QAAA5F,IACAuC,OAAA0D,OAAAhG,KAAAiB,QAAAuC,KAAAU,WAAA5B,OAAAoC,SAAA,IAAA1E,KAAAiB,QAAA;YACAqB,OAAA4D,OAAAlG,KAAAiB,QAAAiE,KAAAoN,YAAAhQ,OAAA0C,UAAA,IAAAhF,KAAAiB,QAAA;;;;;YASA,KANAjB,KAAAmN,MAAA3G,UAMAzG,IAAA,GAAAiH,MAAAhH,KAAA2F,QAAApB,QAAAxE,IAAAiH,KAAAjH,KACAuC,SAAAtC,KAAA2F,QAAA5F;YACAuC,OAAAgF;YAGAoB,OAAA1I,KAAA8K;YAEA,IAAAtH,GACA0B;YAEA,KAAAnF,IAAA,GAAAiH,MAAAhH,KAAA2F,QAAApB,QAAAxE,IAAAiH,KAAAjH,KACAuC,SAAAtC,KAAA2F,QAAA5F,IACAyD,IAAAlB,OAAAwD,SAAAxD,OAAAoC;YACAQ,IAAA5C,OAAAyD,SAAAzD,OAAA0C,QACAxB,IAAAkF,SACAA,OAAAlF,IAEA0B,IAAAqN,SACAA,OAAArN;YAIA,KAAAnF,IAAA,GAAAiH,MAAAhH,KAAAsJ,MAAA/E,QAAAxE,IAAAiH,KAAAjH,KAAA;gBACA2H,OAAA1H,KAAAsJ,MAAAvJ,GAAA0E,WACAjB,IAAAkE,KAAAlE,GACA0B,IAAAwC,KAAAxC;gBACA,IAAAwN,KAAAhL,KAAAgL,IACAC,KAAAjL,KAAAiL;gBACAnP,IAAAgP,SACAA,OAAAhP,IAEA0B,IAAAuN,SACAA,OAAAvN,IAEAwN,KAAAhK,SACAA,OAAAgK,KAEAC,KAAAJ,SACAA,OAAAI;;YAIA,IAAAC,QAAA5S,KAAAiB,QAAA,OACA4R,YAAA7S,KAAAiB,QAAA;YAEAjB,KAAA6K,kBAAA2H,gBAAAxS,KAAA6K,kBAEA2H,OAAA,MAAAA,QAAAK;YACAJ,OAAA,MAAAA,QAAAI;YAEA,IAAAnO,QAAAgE,OAAAmK,YAAAL,MACAxN,SAAAuN,OAAAM,YAAAJ;YAEAzS,KAAAwC,MAAAsQ,QAAApO,QAAAkO,OAAA5N,SAAA4N,QACA5S,KAAAwC,MAAAuQ,WAAAP,MAAAC,MAAA/N,OAAAM,SAAA;WAGAnE,UAAAa,UAAAuM,QAAA;YACA,IAAAjO,KAAAwC,OAAA;gBACA,IAAAwQ,WAAAhT,KAAAwC,MAAAyQ;gBACAD,SAAAE,WAAAC,YAAAH;;WAIAtT,OAAAD,UAAAoB;;;;;;ITgiDM,SAAUnB,QAAQD;;QU/sDxBC,OAAAD;YACA+D,GAAA;YACA0B,GAAA;YACAkO,cAAA;YACAC,eAAA;YACAC,eAAA;YACA5P,aAAA;YACA6P,cAAA;;;;YAIAC,cAAA;YACAC,iBAAA;YACAhQ,MAAA;YACAiQ,YAAA;YACAC,WAAA;YACApI,aAAA;YACAqI,OAAA;YACAhB,OAAA;YACAjN;gBACAwH;gBACA0G;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;;;;;;;;IViuDM,SAAUxU,QAAQD;;QW3vDxB0U,MAAAzS,UAAA+F,YACA0M,MAAAzS,UAAA+F,UAAA,SAAA2M;YACA;YACA,aAAApU,MACA,UAAAqU;YAEA,IAAAC,IAAA9S,OAAAxB,OACAgH,MAAAsN,EAAA/P,WAAA;YACA,UAAAyC,KACA;YAEA,IAAAuN,IAAA;YASA,IARAC,UAAAjQ,SAAA,MACAgQ,IAAAE,OAAAD,UAAA,KACAD;YACAA,IAAA,IACA,MAAAA,UAAAG,SAAAH,OAAAG,WACAH,SAAA,WAAArN,KAAAyN,MAAAzN,KAAAC,IAAAoN;YAGAA,KAAAvN,KACA;YAGA,KADA,IAAA4N,IAAAL,KAAA,IAAAA,IAAArN,KAAA2J,IAAA7J,MAAAE,KAAAC,IAAAoN,IAAA,IACAK,IAAA5N,KAAA4N,KACA,IAAAA,KAAAN,OAAAM,OAAAR,eACA,OAAAQ;YAGA;;QAKAT,MAAAzS,UAAAmT,gBACAV,MAAAzS,UAAAmT,cAAA,SAAAT;YACA;YACA,aAAApU,MACA,UAAAqU;YAEA,IAAAC,IAAA9S,OAAAxB,OACAgH,MAAAsN,EAAA/P,WAAA;YACA,UAAAyC,KACA;YAEA,IAAAuN,IAAAvN;YACAwN,UAAAjQ,SAAA,MACAgQ,IAAAE,OAAAD,UAAA,KACAD,SACAA,IAAA,IACA,MAAAA,UAAA,SAAAA,OAAA,WACAA,SAAA,WAAArN,KAAAyN,MAAAzN,KAAAC,IAAAoN;YAIA,KADA,IAAAK,IAAAL,KAAA,IAAArN,KAAA4N,IAAAP,GAAAvN,MAAA,KAAAA,MAAAE,KAAAC,IAAAoN,IACAK,KAAA,GAAAA,KACA,IAAAA,KAAAN,OAAAM,OAAAR,eACA,OAAAQ;YAGA;YAIAG,OAAArT,UAAAwL,SACA6H,OAAArT,UAAAwL,OAAA;YACA,OAAAlN,KAAAkP,QAAA;;;;;;;IXuwDM,SAAUxP,QAAQD,SAASU;QYv0DjC,SAAAuN,IAAArL,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAA4O,KAAA;YACAnQ,yBACAA,QAAAiC,OAAAjC,QAAAiC,QAAA,OACAd,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB;;QAPA,IAAAF,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAQAA,SAAAuL,KAAAtL,SAEA1C,OAAAD,UAAAiO;;;;;;IZo1DM,SAAUhO,QAAQD,SAASU;Qa11DjC,SAAAyN,YAAAvL,OAAApB;YACAA,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,UACAjB,KAAAwQ,aAAAxQ,KAAAqD,QAAA;YAEArD,KAAAkD,KAAAI;gBACAE,GAAA,IAAAxD,KAAAwQ;;YAGA,IAAA9L,QAAA1E,KAAAkD,KAAAuB,UAAAC,QAAA,IAAA1E,KAAAwQ,YACAxL,SAAAhF,KAAAkD,KAAAuB,UAAAO,SAAA,IAAAhF,KAAAwQ,YACAM,SAAA9Q,KAAAwQ,YACAO,SAAA/L,SAAA,GAEAmI;gBAAA3J,GAAAsN;gBAAA5L,GAAA6L;eACA9F;gBACAzH,GAAAsN,SAAA9Q,KAAAwQ;gBAAAtL,GAAAF;;gBACAxB,GAAAsN,SAAA9Q,KAAAwQ,aAAA9L;gBAAAQ,GAAAF;;gBACAxB,GAAAsN,SAAA9Q,KAAAwQ,aAAA9L,QAAA,IAAA1E,KAAAwQ;gBAAAtL,GAAA;;gBACA1B,GAAAsN,SAAA9Q,KAAAwQ,aAAA,IAAAxQ,KAAAwQ;gBAAAtL,GAAA;;gBACA1B,GAAAsN;gBAAA5L,GAAA6L;iBAGAzO,SAAAyI,SAAA1I,OAAA8K,OAAAlC;YAEA3I,OAAAgB;gBACAwB,QAAA9E,KAAAqD,QAAA;gBACA0B,gBAAA/E,KAAAqD,QAAA;gBACAI,MAAAzD,KAAAqD,QAAA;gBAEApC,QAAA+C,QAAA1B,OAAAgB,KAAA,QAAArC,QAAA+C,OACA/C,QAAAgD,UAAA3B,OAAAgB,KAAA,UAAArC,QAAAgD;YACAhD,QAAA6B,QAAAR,OAAAa,KAAA7C,KAAAW,QAAA6B,MACAR,OAAAa,KAAAC,aAAA,SAAApD,KAAAqD,QAAA;YAEArD,KAAAkD,KAAAI;gBACA4B,GAAA5C,OAAAmC,UAAAO,SAAA;gBAGAhF,KAAAuC,MAAAqC,KAAAtC,SACAA,OAAA2C,aAAAjF,KAAAkD,OAEAlD,KAAAmF;;QA/CA,IAAA/C,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC,UACAiD,UAAAjF,iDAAA,IACA4K,WAAA3F,QAAA2F;QA8CA5I,SAAAyL,aAAAxL,SAEAwL,YAAAlM,UAAA4E,UAAA;YACA,IAAApB,IAAAlF,KAAA+F,SAAA/F,KAAAuC,MAAAkC,UAAAO,SAAA,GACAxB,IAAAxD,KAAA8F,SAAA9F,KAAAwQ;YACA;gBAAAhN;gBAAA0B;;WAGA0I,YAAAlM,UAAA6E,WAAA;YACA,IAAArB,IAAAlF,KAAA+F,SAAA/F,KAAAuC,MAAAkC,UAAAO,SAAA,GACAxB,IAAAxD,KAAA8F,SAAA9F,KAAAuC,MAAAkC,UAAAC,QAAA1E,KAAAwQ;YACA;gBAAAhN;gBAAA0B;;WAGAxF,OAAAD,UAAAmO;;;;;;Iby2DM,SAAUlO,QAAQD,SAASU;Qcr6DjC,SAAAwN,UAAAtL,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAA4O,KAAA;YACAnQ,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB;;QANA,IAAAF,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAOAA,SAAAwL,WAAAvL,SAEA1C,OAAAD,UAAAkO;;;;;;Idk7DM,SAAUjO,QAAQD,SAASU;Qez7DjC,SAAAqN,MAAAnL,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAA4O,KAAA;YACAnQ,yBACAA,QAAAiC,OAAAjC,QAAAiC,QAAA,SACAd,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB;;QAPA,IAAAF,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAQAA,SAAAqL,OAAApL,SAEA1C,OAAAD,UAAA+N;;;;;;If69DM,SAAU9N,QAAQD,SAASU;QgBr+DjC,SAAA0N,WAAAxL,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAA4O,KAAA;YACAnQ,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB,SAEAA,OAAAgB;gBACAoB,OAAA1E,KAAAkD,KAAAuB,UAAAC,QAAA,IAAA1E,KAAAqD,QAAA;gBAGArD,KAAAkD,KAAAI;gBACAE,GAAA,IAAAxD,KAAAqD,QAAA;;YAGA,IAAA2R,YAAA3S,MAAAG,MAAA4O,KAAA;YACA4D,UAAA1R;gBACAE,GAAAxD,KAAAqD,QAAA;gBACAyB,QAAA9E,KAAAqD,QAAA;gBACA0B,gBAAA/E,KAAAqD,QAAA;gBACAqB,OAAA1E,KAAAkD,KAAAuB,UAAAC,QAAA,IAAA1E,KAAAqD,QAAA;gBACA2B,QAAAhF,KAAAkD,KAAAuB,UAAAO,SAAA,IAAAhF,KAAAqD,QAAA;gBACAI,MAAAzD,KAAAqD,QAAA;gBAEApC,QAAA6B,QAAAkS,UAAA7R,KAAA7C,KAAAW,QAAA6B,MAAA;YAEA,IAAAa,OAAA3D,KAAAqD,QAAA,SACAO,QAAA5D,KAAAqD,QAAA,gBACAQ,QAAA7D,KAAAqD,QAAA;YAEAM,QAAAqR,UAAA1R;gBAAAK;gBACAC,SAAAoR,UAAA1R;gBAAAQ,eAAAF;gBACAC,SAAAmR,UAAA1R;gBAAAS,eAAAF;gBAEA5C,QAAA+C,QAAAgR,UAAA1R,KAAA,QAAArC,QAAA+C,OACA/C,QAAAgD,UAAA+Q,UAAA1R,KAAA,UAAArC,QAAAgD;YACAjE,KAAAuC,MAAAqC,KAAAoQ,YACAA,UAAA/P,aAAAjF,KAAAkD,OAEAlD,KAAAmF;;QAxCA,IAAA/C,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAyCAA,SAAA0L,YAAAzL,SAEA1C,OAAAD,UAAAoO;;;;;;IhBk/DM,SAAUnO,QAAQD,SAASU;QiB9hEjC,0BAAA8U,QAAA;YACA,IAAArU,QAAAT,6CAAA;aACA,SAAA+U;gBACAA,EAAAC,GAAA/C,YAAA,SAAAnR;oBACA,OAAAjB,KAAAoV,KAAA;wBACA,IAAAC,QAAAH,EAAAlV,OACAqC,QAAAzB,MAAAyU,MAAAnS;wBACAmS,MAAAC,KAAA,KACAjT,MAAA+K,QAAApN,MAAAiB;;;cAGAgU;;;;;;;IjByiEM,SAAUvV,QAAQD;QkBpjExBC,OAAAD,UAAAQ","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t x = symbol.getX() + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap b37b19315d17d041d426","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n this.params = options.params;\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n x = symbol.getX() + symbol.width;\n y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index 6d3cb2e4..89260a0a 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,7 +1,7 @@ -// flowchart.js, v1.11.2 +// flowchart.js, v1.11.3 // Copyright (c)2018 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js -!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(9);var r=e(4);e(15);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),o=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var h=this.getAttr("maxWidth");if(h){for(var n=i.text.split(" "),a="",l=0,p=n.length;lh?"\n"+x:" "+x}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var y=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*y,height:this.text.getBBox().height+2*y}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),o=s.drawLine,h=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this,i=this.getAttr("line-length");if("right"===this.next_direction){var e=this.getRight();this.next.isPositioned||(this.next.setY(e.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+i),function e(){for(var r,s=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&n<=t.next.width/2){s=!0;break}}s&&(t.next.setX(r.getX()+r.width+i),e())}(),this.next.isPositioned=!0,this.next.render())}else if("left"===this.next_direction){var r=this.getLeft();this.next.isPositioned||(this.next.setY(r.y-this.next.height/2),this.next.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var r,s=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&n<=t.next.width/2){s=!0;break}}s&&(t.next.setX(r.getX()+r.width+i),e())}(),this.next.isPositioned=!0,this.next.render())}else{var s=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+i),this.next.setX(s.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,n=this.getCenter().y,a=this.getRight(),l=this.getBottom(),p=this.getTop(),x=this.getLeft(),y=t.getCenter().x,g=t.getCenter().y,c=t.getTop(),f=t.getRight(),d=t.getLeft(),m=s===y,u=n===g,b=ng||this===t,v=s>y,w=sk&&(k=c.x);else r=this.leftEnd&&_?o(this.chart,l,[{x:l.x,y:l.y+B/2},{x:l.x+(l.x-c.x)/2,y:l.y+B/2},{x:l.x+(l.x-c.x)/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i):o(this.chart,l,[{x:l.x,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.bottomStart=!0,t.topEnd=!0,k=l.x+(l.x-c.x)/2;else r=o(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else r=o(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else r=o(this.chart,x,f,i),this.leftStart=!0,t.rightEnd=!0,k=f.x;else r=o(this.chart,a,d,i),this.rightStart=!0,t.leftEnd=!0,k=d.x;else r=o(this.chart,l,c,i),this.bottomStart=!0,t.topEnd=!0,k=l.x;if(this.lineStyle[t.key]&&r&&r.attr(this.lineStyle[t.key]),r){for(var O=0,L=this.chart.lines.length;OG?($=["L",J.x+2*A,q],T.splice(I+1,0,$),$=["C",J.x+2*A,q,J.x,q-4*A,J.x-2*A,q],T.splice(I+2,0,$),r.attr("path",T)):($=["L",J.x-2*A,q],T.splice(I+1,0,$),$=["C",J.x-2*A,q,J.x,q-4*A,J.x+2*A,q],T.splice(I+2,0,$),r.attr("path",T)):q>Q?($=["L",V,J.y+2*A],T.splice(I+1,0,$),$=["C",V,J.y+2*A,V+4*A,J.y,V,J.y-2*A],T.splice(I+2,0,$),r.attr("path",T)):($=["L",V,J.y-2*A],T.splice(I+1,0,$),$=["C",V,J.y-2*A,V+4*A,J.y,V,J.y+2*A],T.splice(I+2,0,$),r.attr("path",T)),I+=2,M+=2}}}this.chart.lines.push(r),(void 0===this.chart.minXFromSymbols||this.chart.minXFromSymbols>x.x)&&(this.chart.minXFromSymbols=x.x)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,o="M{0},{1}";for(r=2,s=2*e.length+2;rf.x?i.x-(i.x-f.x)/2:f.x-(f.x-i.x)/2,m=i.y>f.y?i.y-(i.y-f.y)/2:f.y-(f.y-i.y)/2,c?(d-=g.getBBox().width/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"],m-=g.getBBox().height/2)):(d=i.x,m=i.y,c?(d+=t.options["text-margin"]/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"]/2,m+=t.options["text-margin"],i.y>f.y&&(m-=2*t.options["text-margin"]))),g.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:d,y:m}),l&&g.attr({font:l}),p&&g.attr({"font-family":p}),x&&g.attr({"font-weight":x})}return a}function s(t,i,e,r,s,o,h,n){var a,l,p,x,y,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(n-o)*(e-t)-(h-s)*(r-i),0===a?g:(l=i-o,p=t-s,x=(h-s)*l-(n-o)*p,y=(e-t)*l-(r-i)*p,l=x/a,p=y/a,g.x=t+l*(e-t),g.y=i+l*(r-i),l>0&&l<1&&(g.onLine1=!0),p>0&&p<1&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function r(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?g.symbols[t.substring(0,i-1)]:g.symbols[t]}function y(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=E.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var g={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(y,t);break;case"end":g[t.key]=new h(y,t);break;case"operation":g[t.key]=new n(y,t);break;case"inputoutput":g[t.key]=new a(y,t);break;case"subroutine":g[t.key]=new l(y,t);break;case"condition":g[t.key]=new p(y,t);break;case"parallel":g[t.key]=new x(y,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var y=new s(t,i);this.diagram=y;var g={};!function t(i,s,o){var h=e(i);return r.start===i?y.startWith(h):s&&o&&!s.pathOk&&(s instanceof p?(o.yes===i&&s.yes(h),o.no===i&&s.no(h)):s instanceof x?(o.path1===i&&s.path1(h),o.path2===i&&s.path2(h),o.path3===i&&s.path3(h)):s.then(h)),h.pathOk?h:(h instanceof p?(i.yes&&t(i.yes,h,i),i.no&&t(i.no,h,i)):h instanceof x?(i.path1&&t(i.path1,h,i),i.path2&&t(i.path2,h,i),i.path3&&t(i.path3,h,i)):i.next&&t(i.next,h,i),h)}(this.start),y.render()},clean:function(){this.diagram.clean()}},c=[],f=0,d=1,m=t.length;d")<0&&v.indexOf("=>")<0&&v.indexOf("@>")<0?(c[b-1]+="\n"+v,c.splice(b,1),_--):b++}for(;c.length>0;){var w=c.splice(0,1)[0].trim();if(w.indexOf("=>")>=0){var k=w.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var X=A[1].split(","),O=0;O=0&&(M=B.symbolType.split(": "),B.symbolType=M.shift(),B.text=M.join(": ")),B.text&&B.text.indexOf(":>")>=0?(M=B.text.split(":>"),B.text=M.shift(),B.link=M.join(":>")):B.symbolType.indexOf(":>")>=0&&(M=B.symbolType.split(":>"),B.symbolType=M.shift(),B.link=M.join(":>")),B.symbolType.indexOf("\n")>=0&&(B.symbolType=B.symbolType.split("\n")[0]),B.link){var S=B.link.indexOf("[")+1,C=B.link.indexOf("]");S>=0&&C>=0&&(B.target=B.link.substring(S,C),B.link=B.link.substring(0,S-1))}if(B.text&&B.text.indexOf("|")>=0){var T=B.text.split("|");B.flowstate=T.pop().trim(),B.text=T.join("|")}g.symbols[B.key]=B}else if(w.indexOf("->")>=0)for(var Y=w.split("->"),O=0,P=Y.length;O=0){var I=R.split(",");R=I[0],F=I[1].trim()}if(g.start||(g.start=z),O+1")>=0)for(var W=w.split("@>"),O=0,P=W.length;Or.right_symbol.getCenter().y&&n<=r.right_symbol.width/2){s=!0;break}}s&&(r.right_symbol.setX(e.getX()+e.width+t),i())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),this.textMargin=this.getAttr("text-margin"),this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top",this.params=i.params,"path1"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path2"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path3"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),i.path1&&i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path1?(this.path2_direction="bottom",this.path1_direction="right",this.path3_direction="top"):"top"===i.direction_path1?(this.path2_direction="right",this.path1_direction="top",this.path3_direction="bottom"):"left"===i.direction_path1?(this.path2_direction="right",this.path1_direction="left",this.path3_direction="bottom"):(this.path2_direction="right",this.path1_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="left",this.path3_direction="right"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="top",this.path3_direction="right"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="left"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):(this.path1_direction=i.direction_path1,this.path2_direction=i.direction_path2,this.path3_direction=i.direction_path3),this.path1_direction=this.path1_direction||"bottom",this.path2_direction=this.path2_direction||"right",this.path3_direction=this.path3_direction||"top",this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),r.prototype.render=function(){this.path1_direction&&(this[this.path1_direction+"_symbol"]=this.path1_symbol),this.path2_direction&&(this[this.path2_direction+"_symbol"]=this.path2_symbol),this.path3_direction&&(this[this.path3_direction+"_symbol"]=this.path3_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.top_symbol){var e=this.getTop();this.top_symbol.isPositioned||(this.top_symbol.shiftY(this.getY()-this.top_symbol.height-t),this.top_symbol.setX(e.x+this.top_symbol.width),this.top_symbol.isPositioned=!0,this.top_symbol.render())}var r=this;if(this.left_symbol){var s=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(s.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+t)),function i(){for(var e,s=!1,o=0,h=r.chart.symbols.length;or.left_symbol.getCenter().y&&n<=r.left_symbol.width/2){s=!0;break}}s&&(r.left_symbol.setX(e.getX()+e.width+t),i())}(),this.left_symbol.isPositioned=!0,this.left_symbol.render())}if(this.right_symbol){var o=this.getRight();this.right_symbol.isPositioned||(this.right_symbol.setY(o.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t),function i(){for(var e,s=!1,o=0,h=r.chart.symbols.length;or.right_symbol.getCenter().y&&n<=r.right_symbol.width/2){s=!0;break}}s&&(r.right_symbol.setX(e.getX()+e.width+t),i())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}},r.prototype.renderLines=function(){this.path1_symbol&&this.drawLineTo(this.path1_symbol,"",this.path1_direction),this.path2_symbol&&this.drawLineTo(this.path2_symbol,"",this.path2_direction),this.path3_symbol&&this.drawLineTo(this.path3_symbol,"",this.path3_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=o(i,h),this.symbols=[],this.lines=[],this.start=null}var s=e(16),o=e(1).defaults,h=e(8),n=e(5),a=e(6);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof n?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t instanceof a?(t.path1=function(e){return t.path1_symbol=e,t.path2_symbol&&(t.pathOk=!0),i.handle(e)},t.path2=function(e){return t.path2_symbol=e,t.path3_symbol&&(t.pathOk=!0),i.handle(e)},t.path3=function(e){return t.path3_symbol=e,t.path1_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,o=0,h=0,n=0,a=0,l=0;for(s=0,o=this.symbols.length;se&&(e=t.width),t.height>r&&(r=t.height);for(s=0,o=this.symbols.length;sh&&(h=p),x>n&&(n=x);for(s=0,o=this.lines.length;sh&&(h=y),g>n&&(n=g)}var c=this.options.scale,f=this.options["line-width"];this.minXFromSymbols>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);s>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,h=r/2,a={x:o,y:h},l=[{x:o-this.textMargin,y:r},{x:o-this.textMargin+e,y:r},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:h}],p=n(t,a,l);p.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&p.attr("href",i.link),i.target&&p.attr("target",i.target),i.key&&(p.node.id=i.key),p.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:p.getBBox().height/2}),this.group.push(p),p.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,h=e(3),n=h.drawPath;o(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var o=this.getAttr("font"),h=this.getAttr("font-family"),n=this.getAttr("font-weight");o&&r.attr({font:o}),h&&r.attr({"font-family":h}),n&&r.attr({"font-weight":n}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); +!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(9);var r=e(4);e(15);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:r}},function(t,i,e){function r(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var r=this.getAttr("font"),s=this.getAttr("font-family"),o=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var h=this.getAttr("maxWidth");if(h){for(var n=i.text.split(" "),a="",l=0,p=n.length;lh?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var x=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*x,height:this.text.getBBox().height+2*x}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var s=e(3),o=s.drawLine,h=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||r||e}},r.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.prototype.render=function(){if(this.next){var t=this,i=this.getAttr("line-length");if("right"===this.next_direction){var e=this.getRight();this.next.isPositioned||(this.next.setY(e.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+i),function e(){for(var r,s=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&n<=t.next.width/2){s=!0;break}}if(s){if("end"===t.next.symbolType)return;t.next.setX(r.getX()+r.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else if("left"===this.next_direction){var r=this.getLeft();this.next.isPositioned||(this.next.setY(r.y-this.next.height/2),this.next.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var r,s=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&n<=t.next.width/2){s=!0;break}}if(s){if("end"===t.next.symbolType)return;t.next.setX(r.getX()+r.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else{var s=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+i),this.next.setX(s.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,n=this.getCenter().y,a=this.getRight(),l=this.getBottom(),p=this.getTop(),y=this.getLeft(),x=t.getCenter().x,g=t.getCenter().y,c=t.getTop(),f=t.getRight(),d=t.getLeft(),m=s===x,u=n===g,b=ng||this===t,v=s>x,w=sk&&(k=c.x);else r=this.leftEnd&&_?o(this.chart,l,[{x:l.x,y:l.y+B/2},{x:l.x+(l.x-c.x)/2,y:l.y+B/2},{x:l.x+(l.x-c.x)/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i):o(this.chart,l,[{x:l.x,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.bottomStart=!0,t.topEnd=!0,k=l.x+(l.x-c.x)/2;else r=o(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else r=o(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else r=o(this.chart,y,f,i),this.leftStart=!0,t.rightEnd=!0,k=f.x;else r=o(this.chart,a,d,i),this.rightStart=!0,t.leftEnd=!0,k=d.x;else r=o(this.chart,l,c,i),this.bottomStart=!0,t.topEnd=!0,k=l.x;if(this.lineStyle[t.key]&&r&&r.attr(this.lineStyle[t.key]),r){for(var O=0,L=this.chart.lines.length;OG?($=["L",J.x+2*A,q],C.splice(I+1,0,$),$=["C",J.x+2*A,q,J.x,q-4*A,J.x-2*A,q],C.splice(I+2,0,$),r.attr("path",C)):($=["L",J.x-2*A,q],C.splice(I+1,0,$),$=["C",J.x-2*A,q,J.x,q-4*A,J.x+2*A,q],C.splice(I+2,0,$),r.attr("path",C)):q>Q?($=["L",V,J.y+2*A],C.splice(I+1,0,$),$=["C",V,J.y+2*A,V+4*A,J.y,V,J.y-2*A],C.splice(I+2,0,$),r.attr("path",C)):($=["L",V,J.y-2*A],C.splice(I+1,0,$),$=["C",V,J.y-2*A,V+4*A,J.y,V,J.y+2*A],C.splice(I+2,0,$),r.attr("path",C)),I+=2,M+=2}}}this.chart.lines.push(r),(void 0===this.chart.minXFromSymbols||this.chart.minXFromSymbols>y.x)&&(this.chart.minXFromSymbols=y.x)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,o="M{0},{1}";for(r=2,s=2*e.length+2;rf.x?i.x-(i.x-f.x)/2:f.x-(f.x-i.x)/2,m=i.y>f.y?i.y-(i.y-f.y)/2:f.y-(f.y-i.y)/2,c?(d-=g.getBBox().width/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"],m-=g.getBBox().height/2)):(d=i.x,m=i.y,c?(d+=t.options["text-margin"]/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"]/2,m+=t.options["text-margin"],i.y>f.y&&(m-=2*t.options["text-margin"]))),g.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:d,y:m}),l&&g.attr({font:l}),p&&g.attr({"font-family":p}),y&&g.attr({"font-weight":y})}return a}function s(t,i,e,r,s,o,h,n){var a,l,p,y,x,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(n-o)*(e-t)-(h-s)*(r-i),0===a?g:(l=i-o,p=t-s,y=(h-s)*l-(n-o)*p,x=(e-t)*l-(r-i)*p,l=y/a,p=x/a,g.x=t+l*(e-t),g.y=i+l*(r-i),l>0&&l<1&&(g.onLine1=!0),p>0&&p<1&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function r(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?g.symbols[t.substring(0,i-1)]:g.symbols[t]}function x(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=E.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var g={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(x,t);break;case"end":g[t.key]=new h(x,t);break;case"operation":g[t.key]=new n(x,t);break;case"inputoutput":g[t.key]=new a(x,t);break;case"subroutine":g[t.key]=new l(x,t);break;case"condition":g[t.key]=new p(x,t);break;case"parallel":g[t.key]=new y(x,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var x=new s(t,i);this.diagram=x;var g={};!function t(i,s,o){var h=e(i);return r.start===i?x.startWith(h):s&&o&&!s.pathOk&&(s instanceof p?(o.yes===i&&s.yes(h),o.no===i&&s.no(h)):s instanceof y?(o.path1===i&&s.path1(h),o.path2===i&&s.path2(h),o.path3===i&&s.path3(h)):s.then(h)),h.pathOk?h:(h instanceof p?(i.yes&&t(i.yes,h,i),i.no&&t(i.no,h,i)):h instanceof y?(i.path1&&t(i.path1,h,i),i.path2&&t(i.path2,h,i),i.path3&&t(i.path3,h,i)):i.next&&t(i.next,h,i),h)}(this.start),x.render()},clean:function(){this.diagram.clean()}},c=[],f=0,d=1,m=t.length;d")<0&&v.indexOf("=>")<0&&v.indexOf("@>")<0?(c[b-1]+="\n"+v,c.splice(b,1),_--):b++}for(;c.length>0;){var w=c.splice(0,1)[0].trim();if(w.indexOf("=>")>=0){var k=w.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var X=A[1].split(","),O=0;O=0&&(M=B.symbolType.split(": "),B.symbolType=M.shift(),B.text=M.join(": ")),B.text&&B.text.indexOf(":>")>=0?(M=B.text.split(":>"),B.text=M.shift(),B.link=M.join(":>")):B.symbolType.indexOf(":>")>=0&&(M=B.symbolType.split(":>"),B.symbolType=M.shift(),B.link=M.join(":>")),B.symbolType.indexOf("\n")>=0&&(B.symbolType=B.symbolType.split("\n")[0]),B.link){var T=B.link.indexOf("[")+1,S=B.link.indexOf("]");T>=0&&S>=0&&(B.target=B.link.substring(T,S),B.link=B.link.substring(0,T-1))}if(B.text&&B.text.indexOf("|")>=0){var C=B.text.split("|");B.flowstate=C.pop().trim(),B.text=C.join("|")}g.symbols[B.key]=B}else if(w.indexOf("->")>=0)for(var Y=w.split("->"),O=0,P=Y.length;O=0){var I=R.split(",");R=I[0],F=I[1].trim()}if(g.start||(g.start=z),O+1")>=0)for(var W=w.split("@>"),O=0,P=W.length;Or.right_symbol.getCenter().y&&n<=r.right_symbol.width/2){s=!0;break}}if(s){if("end"===r.right_symbol.symbolType)return;r.right_symbol.setX(e.getX()+e.width+t),i()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),this.textMargin=this.getAttr("text-margin"),this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top",this.params=i.params,"path1"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path2"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path3"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),i.path1&&i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path1?(this.path2_direction="bottom",this.path1_direction="right",this.path3_direction="top"):"top"===i.direction_path1?(this.path2_direction="right",this.path1_direction="top",this.path3_direction="bottom"):"left"===i.direction_path1?(this.path2_direction="right",this.path1_direction="left",this.path3_direction="bottom"):(this.path2_direction="right",this.path1_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="left",this.path3_direction="right"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="top",this.path3_direction="right"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="left"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):(this.path1_direction=i.direction_path1,this.path2_direction=i.direction_path2,this.path3_direction=i.direction_path3),this.path1_direction=this.path1_direction||"bottom",this.path2_direction=this.path2_direction||"right",this.path3_direction=this.path3_direction||"top",this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),r.prototype.render=function(){this.path1_direction&&(this[this.path1_direction+"_symbol"]=this.path1_symbol),this.path2_direction&&(this[this.path2_direction+"_symbol"]=this.path2_symbol),this.path3_direction&&(this[this.path3_direction+"_symbol"]=this.path3_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.top_symbol){var e=this.getTop();this.top_symbol.isPositioned||(this.top_symbol.shiftY(this.getY()-this.top_symbol.height-t),this.top_symbol.setX(e.x+this.top_symbol.width),this.top_symbol.isPositioned=!0,this.top_symbol.render())}var r=this;if(this.left_symbol){var s=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(s.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+t)),function i(){for(var e,s=!1,o=0,h=r.chart.symbols.length;or.left_symbol.getCenter().y&&n<=r.left_symbol.width/2){s=!0;break}}if(s){if("end"===r.left_symbol.symbolType)return;r.left_symbol.setX(e.getX()+e.width+t),i()}}(),this.left_symbol.isPositioned=!0,this.left_symbol.render())}if(this.right_symbol){var o=this.getRight();this.right_symbol.isPositioned||(this.right_symbol.setY(o.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t),function i(){for(var e,s=!1,o=0,h=r.chart.symbols.length;or.right_symbol.getCenter().y&&n<=r.right_symbol.width/2){s=!0;break}}if(s){if("end"===r.right_symbol.symbolType)return;r.right_symbol.setX(e.getX()+e.width+t),i()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}},r.prototype.renderLines=function(){this.path1_symbol&&this.drawLineTo(this.path1_symbol,"",this.path1_direction),this.path2_symbol&&this.drawLineTo(this.path2_symbol,"",this.path2_direction),this.path3_symbol&&this.drawLineTo(this.path3_symbol,"",this.path3_direction)},t.exports=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=o(i,h),this.symbols=[],this.lines=[],this.start=null}var s=e(16),o=e(1).defaults,h=e(8),n=e(5),a=e(6);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof n?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t instanceof a?(t.path1=function(e){return t.path1_symbol=e,t.path2_symbol&&(t.pathOk=!0),i.handle(e)},t.path2=function(e){return t.path2_symbol=e,t.path3_symbol&&(t.pathOk=!0),i.handle(e)},t.path3=function(e){return t.path3_symbol=e,t.path1_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,o=0,h=0,n=0,a=0,l=0;for(s=0,o=this.symbols.length;se&&(e=t.width),t.height>r&&(r=t.height);for(s=0,o=this.symbols.length;sh&&(h=p),y>n&&(n=y);for(s=0,o=this.lines.length;sh&&(h=x),g>n&&(n=g)}var c=this.options.scale,f=this.options["line-width"];this.minXFromSymbols>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);s>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,r=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,h=r/2,a={x:o,y:h},l=[{x:o-this.textMargin,y:r},{x:o-this.textMargin+e,y:r},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:h}],p=n(t,a,l);p.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&p.attr("href",i.link),i.target&&p.attr("target",i.target),i.key&&(p.node.id=i.key),p.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:p.getBBox().height/2}),this.group.push(p),p.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,h=e(3),n=h.drawPath;o(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var r=t.paper.rect(0,0,0,0);r.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(r.node.id=i.key+"i");var o=this.getAttr("font"),h=this.getAttr("font-family"),n=this.getAttr("font-weight");o&&r.attr({font:o}),h&&r.attr({"font-family":h}),n&&r.attr({"font-weight":n}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); //# sourceMappingURL=flowchart.min.js.map \ No newline at end of file diff --git a/release/flowchart.min.js.map b/release/flowchart.min.js.map index 8099ca0a..be4ea0e7 100644 --- a/release/flowchart.min.js.map +++ b/release/flowchart.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap d3ecf33745c811efe3d7","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","params","match","entries","entry","sub","join","txtAndState","pop","flowSymbols","lenS","symbVal","realSymb","direction","condOpt","nextSymb","lineStyleSymbols","curSymb","JSON","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","left_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t x = symbol.getX() + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap d3ecf33745c811efe3d7","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n this.params = options.params;\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n x = symbol.getX() + symbol.width;\n y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap bf0c1bc10daac91c34c6","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","params","match","entries","entry","sub","join","txtAndState","pop","flowSymbols","lenS","symbVal","realSymb","direction","condOpt","nextSymb","lineStyleSymbols","curSymb","JSON","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","left_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t var len;\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t len += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t x += chart.options['text-margin']/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': 'start',\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[0].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t\n\t var realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\n\t\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t x = symbol.getX() + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap bf0c1bc10daac91c34c6","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n var len;\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n len += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n x += chart.options['text-margin']/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': 'start',\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[0].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n\n var realSymb = getSymbol(flowSymb);\n var next = getNextPath(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n this.params = options.params;\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\n\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n x = symbol.getX() + symbol.width;\n y = symbol.getY() + symbol.height;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/releasenotes.md b/releasenotes.md index 59d03841..cdede17d 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,7 @@ +### v1.11.3 + +- try to optimize horizontal rendering for end symbols [#155](https://github.com/adrai/flowchart.js/issues/155) + ### v1.11.2 - try to optimize left handling [#152](https://github.com/adrai/flowchart.js/issues/152) diff --git a/src/flowchart.symbol.condition.js b/src/flowchart.symbol.condition.js index 380eb20b..e59cc646 100644 --- a/src/flowchart.symbol.condition.js +++ b/src/flowchart.symbol.condition.js @@ -145,6 +145,7 @@ Condition.prototype.render = function() { } if (hasSymbolUnder) { + if (self.right_symbol.symbolType === 'end') return; self.right_symbol.setX(symb.getX() + symb.width + lineLength); shift(); } diff --git a/src/flowchart.symbol.js b/src/flowchart.symbol.js index 60798d42..854f34b2 100644 --- a/src/flowchart.symbol.js +++ b/src/flowchart.symbol.js @@ -187,6 +187,7 @@ Symbol.prototype.render = function() { } if (hasSymbolUnder) { + if (self.next.symbolType === 'end') return; self.next.setX(symb.getX() + symb.width + lineLength); shift(); } @@ -218,6 +219,7 @@ Symbol.prototype.render = function() { } if (hasSymbolUnder) { + if (self.next.symbolType === 'end') return; self.next.setX(symb.getX() + symb.width + lineLength); shift(); } diff --git a/src/flowchart.symbol.parallel.js b/src/flowchart.symbol.parallel.js index c01b464c..4d6013db 100644 --- a/src/flowchart.symbol.parallel.js +++ b/src/flowchart.symbol.parallel.js @@ -144,6 +144,7 @@ Parallel.prototype.render = function() { } if (hasSymbolUnder) { + if (self.left_symbol.symbolType === 'end') return; self.left_symbol.setX(symb.getX() + symb.width + lineLength); shift(); } @@ -177,6 +178,7 @@ Parallel.prototype.render = function() { } if (hasSymbolUnder) { + if (self.right_symbol.symbolType === 'end') return; self.right_symbol.setX(symb.getX() + symb.width + lineLength); shift(); } From 416b627cbc91a9edf471338d0945398482d901a0 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Tue, 3 Jul 2018 22:05:00 +0200 Subject: [PATCH 053/117] update site --- site | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site b/site index 2e247b70..9fd513ea 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 2e247b700ae85a92014bd32f374c2e3643582834 +Subproject commit 9fd513ea94c9d43afce261fd11ab7b17cc0abcb5 From 63ad0a747a097c5ff58c1acfc2e7941b5ad511df Mon Sep 17 00:00:00 2001 From: AbdullahAbraham <38958413+AbdullahAbraham@users.noreply.github.com> Date: Tue, 31 Jul 2018 21:07:40 -0300 Subject: [PATCH 054/117] Minor formatting proposals --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a0c45087..50189327 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ flowchart.js is on [CDNJS](https://cdnjs.com/libraries/flowchart), feel free to ## Usage -On your page you need to include raphael like so: +On your page you need to include Raphaël like so: ```html @@ -93,7 +93,7 @@ and then ``` ## Advice -Symbols that should possibly not be used in the text: '=>' and '->' and ':>' and '|' and '@>' +Symbols that should possibly not be used in the text: `=>` and `->` and `:>` and `|` and `@>` If you want to emphasize a specific path in your flowchart, you can additionally define it like this: From 5156d9a0fd86a86afb56b96b93bde8c721891abe Mon Sep 17 00:00:00 2001 From: Andrea Q <49754813+ndrqu@users.noreply.github.com> Date: Mon, 27 May 2019 12:54:30 +0200 Subject: [PATCH 055/117] Added onclick function binding to chart nodes (#172) * Added onclick binding * Add pointer cursor and function parameters * Upddated README and build production js * fixed chart sample code * Updated readme and examples * Readme closing bracket fix * Fixed closing bracket * Removed nodemon dependency --- README.md | 9 +- example/index.html | 7 +- example/test.txt | 2 +- index.html | 39 +- package.json | 5 +- release/flowchart.js | 1159 +------------------------------------- release/flowchart.js.map | 2 +- src/flowchart.parse.js | 11 +- src/flowchart.symbol.js | 18 + webpack.config.js | 8 +- 10 files changed, 74 insertions(+), 1186 deletions(-) diff --git a/README.md b/README.md index 50189327..336a2b65 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ and then ``` diff --git a/example/index.html b/example/index.html index 0a75706c..26c90e49 100644 --- a/example/index.html +++ b/example/index.html @@ -71,13 +71,18 @@ })(); }; + + function myFunction(event, node) { + console.log("You just clicked this node:", node); + } +