UNPKG

drawdown-svg-render

Version:
75 lines (64 loc) 7.17 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.shapeGenerator = shapeGenerator; exports.auto = auto; exports.circle = circle; exports.rectangle = rectangle; exports.diamond = diamond; var _Renderer = require('./Renderer'); function shapeGenerator(style) { switch (style) { case 'AUTO': return auto; case 'RECTANGLE': return rectangle; case 'CIRCLE': return circle; case 'DIAMOND': return diamond; default: throw 'Unknown node style "' + style + '"'; } } function auto(d) { var l = d.layout; switch (d.blockType.toUpperCase()) { case 'PROCESS': return rectanglePath(0, 0, l.w, l.h); case 'NODE': return circlePath(0, 0, Math.sqrt(l.w * l.w + l.h * l.h) / 2); case 'CONDITION': return diamondPath(0, 0, l.w, l.h); case 'TIMELINE': return function () { var foo = 0; return rectanglePath(0, 0, l.w, l.h); }(); } } function circle(d) { var l = d.layout; return circlePath(0, 0, Math.sqrt(l.w * l.w + l.h * l.h) / 2); } function rectangle(d) { var l = d.layout; return rectanglePath(0, 0, l.w, l.h); } function diamond(d) { var l = d.layout; return diamondPath(0, 0, l.w, l.h); } // PATHS function rectanglePath(x, y, w, h) { return 'M' + (x - w / 2 - _Renderer.PADDING) + ' ' + (y - h / 2 - _Renderer.PADDING) + 'h' + (w + 2 * _Renderer.PADDING) + 'v' + (h + 2 * _Renderer.PADDING) + 'h' + (-w - 2 * _Renderer.PADDING) + 'Z'; } function diamondPath(x, y, w, h) { var ww = w + h + _Renderer.PADDING; return 'M' + 0 + ' ' + (y - ww / 2) + '\n L' + (x + ww / 2) + ' 0\n L0 ' + (y + ww / 2) + '\n L' + (x - ww / 2) + ' 0\n Z'; } function circlePath(x, y, r) { return 'M' + (x - r) + ' ' + y + '\n a ' + r + ' ' + r + ' 0 1 0 ' + r * 2 + ' 0\n a ' + r + ' ' + r + ' 0 1 0 ' + -r * 2 + ' 0'; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oZWxwZXJzL3NoYXBlLmpzIl0sIm5hbWVzIjpbInNoYXBlR2VuZXJhdG9yIiwiYXV0byIsImNpcmNsZSIsInJlY3RhbmdsZSIsImRpYW1vbmQiLCJzdHlsZSIsImQiLCJsIiwibGF5b3V0IiwiYmxvY2tUeXBlIiwidG9VcHBlckNhc2UiLCJyZWN0YW5nbGVQYXRoIiwidyIsImgiLCJjaXJjbGVQYXRoIiwiTWF0aCIsInNxcnQiLCJkaWFtb25kUGF0aCIsImZvbyIsIngiLCJ5IiwiUCIsInd3IiwiciJdLCJtYXBwaW5ncyI6Ijs7Ozs7UUFHZ0JBLGMsR0FBQUEsYztRQVdBQyxJLEdBQUFBLEk7UUFnQkFDLE0sR0FBQUEsTTtRQUtBQyxTLEdBQUFBLFM7UUFLQUMsTyxHQUFBQSxPOztBQXhDaEI7O0FBR08sU0FBU0osY0FBVCxDQUF3QkssS0FBeEIsRUFBK0I7QUFDcEMsVUFBU0EsS0FBVDtBQUNFLFNBQUssTUFBTDtBQUFhLGFBQU9KLElBQVA7QUFDYixTQUFLLFdBQUw7QUFBa0IsYUFBT0UsU0FBUDtBQUNsQixTQUFLLFFBQUw7QUFBZSxhQUFPRCxNQUFQO0FBQ2YsU0FBSyxTQUFMO0FBQWdCLGFBQU9FLE9BQVA7QUFDaEI7QUFDRSxxQ0FBNkJDLEtBQTdCO0FBTko7QUFRRDs7QUFFTSxTQUFTSixJQUFULENBQWNLLENBQWQsRUFBaUI7QUFDdEIsTUFBSUMsSUFBSUQsRUFBRUUsTUFBVjtBQUNBLFVBQVFGLEVBQUVHLFNBQUYsQ0FBWUMsV0FBWixFQUFSO0FBQ0UsU0FBSyxTQUFMO0FBQ0UsYUFBT0MsY0FBYyxDQUFkLEVBQWlCLENBQWpCLEVBQW9CSixFQUFFSyxDQUF0QixFQUF5QkwsRUFBRU0sQ0FBM0IsQ0FBUDtBQUNGLFNBQUssTUFBTDtBQUNJLGFBQU9DLFdBQVcsQ0FBWCxFQUFjLENBQWQsRUFBa0JDLEtBQUtDLElBQUwsQ0FBVVQsRUFBRUssQ0FBRixHQUFJTCxFQUFFSyxDQUFOLEdBQVVMLEVBQUVNLENBQUYsR0FBSU4sRUFBRU0sQ0FBMUIsSUFBNkIsQ0FBL0MsQ0FBUDtBQUNKLFNBQUssV0FBTDtBQUNFLGFBQU9JLFlBQVksQ0FBWixFQUFlLENBQWYsRUFBa0JWLEVBQUVLLENBQXBCLEVBQXVCTCxFQUFFTSxDQUF6QixDQUFQO0FBQ0YsU0FBSyxVQUFMO0FBQWlCLGFBQVEsWUFBTTtBQUM3QixZQUFJSyxNQUFNLENBQVY7QUFDQSxlQUFPUCxjQUFjLENBQWQsRUFBaUIsQ0FBakIsRUFBb0JKLEVBQUVLLENBQXRCLEVBQXlCTCxFQUFFTSxDQUEzQixDQUFQO0FBQXFDLE9BRmYsRUFBUDtBQVBuQjtBQVlEOztBQUVNLFNBQVNYLE1BQVQsQ0FBZ0JJLENBQWhCLEVBQW1CO0FBQ3hCLE1BQUlDLElBQUlELEVBQUVFLE1BQVY7QUFDQSxTQUFPTSxXQUFXLENBQVgsRUFBYSxDQUFiLEVBQWdCQyxLQUFLQyxJQUFMLENBQVVULEVBQUVLLENBQUYsR0FBSUwsRUFBRUssQ0FBTixHQUFVTCxFQUFFTSxDQUFGLEdBQUlOLEVBQUVNLENBQTFCLElBQTZCLENBQTdDLENBQVA7QUFDRDs7QUFFTSxTQUFTVixTQUFULENBQW1CRyxDQUFuQixFQUFzQjtBQUMzQixNQUFJQyxJQUFJRCxFQUFFRSxNQUFWO0FBQ0EsU0FBT0csY0FBYyxDQUFkLEVBQWlCLENBQWpCLEVBQW9CSixFQUFFSyxDQUF0QixFQUF5QkwsRUFBRU0sQ0FBM0IsQ0FBUDtBQUNEOztBQUVNLFNBQVNULE9BQVQsQ0FBaUJFLENBQWpCLEVBQW9CO0FBQ3pCLE1BQUlDLElBQUlELEVBQUVFLE1BQVY7QUFDQSxTQUFPUyxZQUFZLENBQVosRUFBZSxDQUFmLEVBQWtCVixFQUFFSyxDQUFwQixFQUF1QkwsRUFBRU0sQ0FBekIsQ0FBUDtBQUNEOztBQUVEOztBQUVBLFNBQVNGLGFBQVQsQ0FBdUJRLENBQXZCLEVBQTBCQyxDQUExQixFQUE2QlIsQ0FBN0IsRUFBZ0NDLENBQWhDLEVBQW1DO0FBQ2pDLGdCQUFXTSxJQUFFUCxJQUFFLENBQUosR0FBTVMsaUJBQWpCLFdBQXNCRCxJQUFFUCxJQUFFLENBQUosR0FBUVEsaUJBQTlCLFdBQW1DVCxJQUFFLElBQUVTLGlCQUF2QyxXQUE0Q1IsSUFBRSxJQUFFUSxpQkFBaEQsV0FBcUQsQ0FBQ1QsQ0FBRCxHQUFHLElBQUVTLGlCQUExRDtBQUNEOztBQUVELFNBQVNKLFdBQVQsQ0FBcUJFLENBQXJCLEVBQXdCQyxDQUF4QixFQUEyQlIsQ0FBM0IsRUFBOEJDLENBQTlCLEVBQWlDO0FBQy9CLE1BQUlTLEtBQUtWLElBQUVDLENBQUYsR0FBTVEsaUJBQWY7QUFDQSxlQUFXLENBQVgsVUFBZ0JELElBQUVFLEtBQUcsQ0FBckIsdUJBQ1dILElBQUVHLEtBQUcsQ0FEaEIsMkJBRWFGLElBQUlFLEtBQUcsQ0FGcEIsdUJBR1dILElBQUVHLEtBQUcsQ0FIaEI7QUFLRDs7QUFFRCxTQUFTUixVQUFULENBQW9CSyxDQUFwQixFQUFzQkMsQ0FBdEIsRUFBd0JHLENBQXhCLEVBQTJCO0FBQ3pCLGdCQUFXSixJQUFFSSxDQUFiLFVBQWtCSCxDQUFsQixzQkFDWUcsQ0FEWixTQUNpQkEsQ0FEakIsZUFDNEJBLElBQUUsQ0FEOUIsd0JBRVlBLENBRlosU0FFaUJBLENBRmpCLGVBRTRCLENBQUNBLENBQUQsR0FBRyxDQUYvQjtBQUdEIiwiZmlsZSI6InNoYXBlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUEFERElORyBhcyBQIH0gZnJvbSAnLi9SZW5kZXJlcidcblxuXG5leHBvcnQgZnVuY3Rpb24gc2hhcGVHZW5lcmF0b3Ioc3R5bGUpIHtcbiAgc3dpdGNoICggc3R5bGUgKSB7XG4gICAgY2FzZSAnQVVUTyc6IHJldHVybiBhdXRvO1xuICAgIGNhc2UgJ1JFQ1RBTkdMRSc6IHJldHVybiByZWN0YW5nbGU7XG4gICAgY2FzZSAnQ0lSQ0xFJzogcmV0dXJuIGNpcmNsZTtcbiAgICBjYXNlICdESUFNT05EJzogcmV0dXJuIGRpYW1vbmQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IGBVbmtub3duIG5vZGUgc3R5bGUgXCIke3N0eWxlfVwiYDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXV0byhkKSB7XG4gIGxldCBsID0gZC5sYXlvdXQ7XG4gIHN3aXRjaCAoZC5ibG9ja1R5cGUudG9VcHBlckNhc2UoKSkge1xuICAgIGNhc2UgJ1BST0NFU1MnOlxuICAgICAgcmV0dXJuIHJlY3RhbmdsZVBhdGgoMCwgMCwgbC53LCBsLmgpO1xuICAgIGNhc2UgJ05PREUnOlxuICAgICAgICByZXR1cm4gY2lyY2xlUGF0aCgwLCAwLCAgTWF0aC5zcXJ0KGwudypsLncgKyBsLmgqbC5oKS8yKTtcbiAgICBjYXNlICdDT05ESVRJT04nOlxuICAgICAgcmV0dXJuIGRpYW1vbmRQYXRoKDAsIDAsIGwudywgbC5oKVxuICAgIGNhc2UgJ1RJTUVMSU5FJzogcmV0dXJuICgoKSA9PiB7XG4gICAgICBsZXQgZm9vID0gMDtcbiAgICAgIHJldHVybiByZWN0YW5nbGVQYXRoKDAsIDAsIGwudywgbC5oKX1cbiAgICApKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNpcmNsZShkKSB7XG4gIGxldCBsID0gZC5sYXlvdXQ7XG4gIHJldHVybiBjaXJjbGVQYXRoKDAsMCwgTWF0aC5zcXJ0KGwudypsLncgKyBsLmgqbC5oKS8yKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RhbmdsZShkKSB7XG4gIGxldCBsID0gZC5sYXlvdXQ7XG4gIHJldHVybiByZWN0YW5nbGVQYXRoKDAsIDAsIGwudywgbC5oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpYW1vbmQoZCkge1xuICBsZXQgbCA9IGQubGF5b3V0O1xuICByZXR1cm4gZGlhbW9uZFBhdGgoMCwgMCwgbC53LCBsLmgpO1xufVxuXG4vLyBQQVRIU1xuXG5mdW5jdGlvbiByZWN0YW5nbGVQYXRoKHgsIHksIHcsIGgpIHtcbiAgcmV0dXJuIGBNJHt4LXcvMi1QfSAke3ktaC8yIC0gUH1oJHt3KzIqUH12JHtoKzIqUH1oJHstdy0yKlB9WmA7XG59XG5cbmZ1bmN0aW9uIGRpYW1vbmRQYXRoKHgsIHksIHcsIGgpIHtcbiAgbGV0IHd3ID0gdytoICsgUDtcbiAgcmV0dXJuIGBNJHswfSAke3ktd3cvMn1cbiAgICAgICAgICBMJHt4K3d3LzJ9IDBcbiAgICAgICAgICBMMCAke3kgKyB3dy8yfVxuICAgICAgICAgIEwke3gtd3cvMn0gMFxuICAgICAgICAgIFpgXG59XG5cbmZ1bmN0aW9uIGNpcmNsZVBhdGgoeCx5LHIpIHtcbiAgcmV0dXJuIGBNJHt4LXJ9ICR7eX1cbiAgICAgICAgICBhICR7cn0gJHtyfSAwIDEgMCAke3IqMn0gMFxuICAgICAgICAgIGEgJHtyfSAke3J9IDAgMSAwICR7LXIqMn0gMGBcbn1cbiJdfQ==