drawdown-svg-render
Version:
Svg renderer for drawdown diagrams
75 lines (64 loc) • 7.17 kB
JavaScript
;
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==