UNPKG

patternplate-client

Version:

Universal javascript client application for patternplate

169 lines (147 loc) 16 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); exports.default = BlockColumn; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _block = require('./block'); var _block2 = _interopRequireDefault(_block); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function BlockColumn(props) { var activeBlock = props.activeBlock, align = props.align, base = props.base, items = props.items, x = props.x, y = props.y, location = props.location, connect = props.connect, height = props.height, onClick = props.onClick, onMouseEnter = props.onMouseEnter, onMouseLeave = props.onMouseLeave; return _react2.default.createElement( 'g', null, items.map(function (_ref, index) { var name = _ref.name, id = _ref.id, localName = _ref.localName; var label = [name, localName].join(''); var width = Math.max(5, label.length * 0.8); var offset = align === 'right' ? width + 1 : 0; var n = (50 - width) / 3; var key = [id, name, localName].filter(Boolean).join(':'); return _react2.default.createElement(_block2.default, { active: activeBlock === key, type: 'block', base: base, id: id, blockId: key, name: name, x: x - offset, key: key, y: y + index * (height + 1), width: width, height: height, connect: (0, _extends3.default)({}, connect, { n: n }), onClick: onClick, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, location: location }); }), items.map(function (_ref2, index) { var name = _ref2.name, localName = _ref2.localName, id = _ref2.id; var label = [name, localName].join(''); var text = align === 'right' ? localName : id; var width = Math.max(5, label.length * 0.8); var labelWidth = Math.max(4, text.length * 0.6); var key = [id, name, localName].filter(Boolean).join(':'); var labelX = align === 'right' ? x - width : x + width; var offset = align === 'right' ? 1 : 0; return _react2.default.createElement(Label, { active: activeBlock === key, align: align, key: key, width: labelWidth, height: 1.4, x: labelX - offset, y: y + index * (height + 1) + height / 2 - 0.7, text: text }); }), items.map(function (item) { var labelAlign = align === 'left' ? 'right' : 'left'; var text = align === 'right' ? item.id : item.localName; var key = [item.id, item.name, item.localName].filter(Boolean).join(':'); var labelWidth = Math.max(4, text.length * 0.6); return _react2.default.createElement(Label, { active: activeBlock === key, align: labelAlign, key: key, text: text, width: labelWidth, height: 1.4, x: connect.x, y: connect.y - 0.7 }); }) ); } BlockColumn.defaultProps = { items: [], y: 0, onClick: function onClick() {}, align: 'left', description: '' }; function Label(props) { if (!props.text) { return null; } var x = props.align === 'right' ? props.x - props.width : props.x; var className = (0, _classnames2.default)('label', { 'label--active': props.active }); return _react2.default.createElement( 'g', { className: className }, _react2.default.createElement('circle', { className: 'label__circle', cx: x + props.width, cy: props.y + props.height / 2, r: 0.7 }), _react2.default.createElement('circle', { className: 'label__circle', cx: x, cy: props.y + props.height / 2, r: 0.7 }), _react2.default.createElement('rect', { height: props.height, width: props.width, x: x, y: props.y, className: 'label__container' }), _react2.default.createElement( 'text', { x: x + props.width / 2, y: props.y - 0.175 + props.height / 2, className: 'label__text' }, props.text ) ); } module.exports = exports['default']; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NvdXJjZS9hcHBsaWNhdGlvbi9jb21wb25lbnRzL3BhdHRlcm4vYmxvY2stY29sdW1uLmpzIl0sIm5hbWVzIjpbIkJsb2NrQ29sdW1uIiwicHJvcHMiLCJhY3RpdmVCbG9jayIsImFsaWduIiwiYmFzZSIsIml0ZW1zIiwieCIsInkiLCJsb2NhdGlvbiIsImNvbm5lY3QiLCJoZWlnaHQiLCJvbkNsaWNrIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwibWFwIiwiaW5kZXgiLCJuYW1lIiwiaWQiLCJsb2NhbE5hbWUiLCJsYWJlbCIsImpvaW4iLCJ3aWR0aCIsIk1hdGgiLCJtYXgiLCJsZW5ndGgiLCJvZmZzZXQiLCJuIiwia2V5IiwiZmlsdGVyIiwiQm9vbGVhbiIsInRleHQiLCJsYWJlbFdpZHRoIiwibGFiZWxYIiwibGFiZWxBbGlnbiIsIml0ZW0iLCJkZWZhdWx0UHJvcHMiLCJkZXNjcmlwdGlvbiIsIkxhYmVsIiwiY2xhc3NOYW1lIiwiYWN0aXZlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O2tCQUl3QkEsVzs7QUFKeEI7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7QUFFZSxTQUFTQSxXQUFULENBQXFCQyxLQUFyQixFQUE0QjtBQUFBLEtBRXpDQyxXQUZ5QyxHQUl0Q0QsS0FKc0MsQ0FFekNDLFdBRnlDO0FBQUEsS0FFNUJDLEtBRjRCLEdBSXRDRixLQUpzQyxDQUU1QkUsS0FGNEI7QUFBQSxLQUVyQkMsSUFGcUIsR0FJdENILEtBSnNDLENBRXJCRyxJQUZxQjtBQUFBLEtBRWZDLEtBRmUsR0FJdENKLEtBSnNDLENBRWZJLEtBRmU7QUFBQSxLQUVSQyxDQUZRLEdBSXRDTCxLQUpzQyxDQUVSSyxDQUZRO0FBQUEsS0FFTEMsQ0FGSyxHQUl0Q04sS0FKc0MsQ0FFTE0sQ0FGSztBQUFBLEtBRUZDLFFBRkUsR0FJdENQLEtBSnNDLENBRUZPLFFBRkU7QUFBQSxLQUVRQyxPQUZSLEdBSXRDUixLQUpzQyxDQUVRUSxPQUZSO0FBQUEsS0FF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QU14QixJQUFJTCxNQUFNRSxLQUFOLEtBQWdCLE9BQWhCLEdBQTJCRixNQUFNSyxDQUFOLEdBQVVMLE1BQU1vQixLQUEzQyxHQUFvRHBCLE1BQU1LLENBQXBFO0FBQ0EsS0FBTWdDLFlBQVksMEJBQUssT0FBTCxFQUFjO0FBQy9CLG1CQUFpQnJDLE1BQU1zQztBQURRLEVBQWQsQ0FBbEI7O0FBSUEsUUFDQztBQUFBO0FBQUEsSUFBRyxXQUFXRCxTQUFkO0FBQ0M7QUFDQyxjQUFVLGVBRFg7QUFFQyxPQUFJaEMsSUFBSUwsTUFBTW9CLEtBRmY7QUFHQyxPQUFJcEIsTUFBTU0sQ0FBTixHQUFVTixNQUFNUyxNQUFOLEdBQWUsQ0FIOUI7QUFJQyxNQUFHO0FBSkosSUFERDtBQU9DO0FBQ0MsY0FBVSxlQURYO0FBRUMsT0FBSUosQ0FGTDtBQUdDLE9BQUlMLE1BQU1NLENBQU4sR0FBVU4sTUFBTVMsTUFBTixHQUFlLENBSDlCO0FBSUMsTUFBRztBQUpKLElBUEQ7QUFhQztBQUNDLFdBQVFULE1BQU1TLE1BRGY7QUFFQyxVQUFPVCxNQUFNb0IsS0FGZDtBQUdDLE1BQUdmLENBSEo7QUFJQyxNQUFHTCxNQUFNTSxDQUpWO0FBS0MsY0FBVTtBQUxYLElBYkQ7QUFvQkM7QUFBQTtBQUFBO0FBQ0MsT0FBR0QsSUFBSUwsTUFBTW9CLEtBQU4sR0FBYyxDQUR0QjtBQUVDLE9BQUdwQixNQUFNTSxDQUFOLEdBQVUsS0FBVixHQUFrQk4sTUFBTVMsTUFBTixHQUFlLENBRnJDO0FBR0MsZUFBVSxhQUhYO0FBSUVULFNBQU02QjtBQUpSO0FBcEJELEVBREQ7QUE2QkEiLCJmaWxlIjoiYmxvY2stY29sdW1uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7UHJvcFR5cGVzIGFzIHR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBqb2luIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEJsb2NrIGZyb20gJy4vYmxvY2snO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCbG9ja0NvbHVtbihwcm9wcykge1xuXHRjb25zdCB7XG5cdFx0YWN0aXZlQmxvY2ssIGFsaWduLCBiYXNlLCBpdGVtcywgeCwgeSwgbG9jYXRpb24sIGNvbm5lY3QsIGhlaWdodCwgb25DbGljayxcblx0XHRvbk1vdXNlRW50ZXIsIG9uTW91c2VMZWF2ZVxuXHR9ID0gcHJvcHM7XG5cblx0cmV0dXJuIChcblx0XHQ8Zz5cblx0XHRcdHtcblx0XHRcdFx0aXRlbXMubWFwKCh7bmFtZSwgaWQsIGxvY2FsTmFtZX0sIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgbGFiZWwgPSBbbmFtZSwgbG9jYWxOYW1lXS5qb2luKCcnKTtcblx0XHRcdFx0XHRjb25zdCB3aWR0aCA9IE1hdGgubWF4KDUsIGxhYmVsLmxlbmd0aCAqIDAuOCk7XG5cdFx0XHRcdFx0Y29uc3Qgb2Zmc2V0ID0gYWxpZ24gPT09ICdyaWdodCcgPyB3aWR0aCArIDEgOiAwO1xuXHRcdFx0XHRcdGNvbnN0IG4gPSAoNTAgLSB3aWR0aCkgLyAzO1xuXHRcdFx0XHRcdGNvbnN0IGtleSA9IFtpZCwgbmFtZSwgbG9jYWxOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignOicpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxCbG9ja1xuXHRcdFx0XHRcdFx0XHRhY3RpdmU9e2FjdGl2ZUJsb2NrID09PSBrZXl9XG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJibG9ja1wiXG5cdFx0XHRcdFx0XHRcdGJhc2U9e2Jhc2V9XG5cdFx0XHRcdFx0XHRcdGlkPXtpZH1cblx0XHRcdFx0XHRcdFx0YmxvY2tJZD17a2V5fVxuXHRcdFx0XHRcdFx0XHRuYW1lPXtuYW1lfVxuXHRcdFx0XHRcdFx0XHR4PXt4IC0gb2Zmc2V0fVxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleX1cblx0XHRcdFx0XHRcdFx0eT17eSArIGluZGV4ICogKGhlaWdodCArIDEpfVxuXHRcdFx0XHRcdFx0XHR3aWR0aD17d2lkdGh9XG5cdFx0XHRcdFx0XHRcdGhlaWdodD17aGVpZ2h0fVxuXHRcdFx0XHRcdFx0XHRjb25uZWN0PXt7Li4uY29ubmVjdCwgbn19XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9e29uQ2xpY2t9XG5cdFx0XHRcdFx0XHRcdG9uTW91c2VFbnRlcj17b25Nb3VzZUVudGVyfVxuXHRcdFx0XHRcdFx0XHRvbk1vdXNlTGVhdmU9e29uTW91c2VMZWF2ZX1cblx0XHRcdFx0XHRcdFx0bG9jYXRpb249e2xvY2F0aW9ufVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0XHR7XG5cdFx0XHRcdGl0ZW1zLm1hcCgoe25hbWUsIGxvY2FsTmFtZSwgaWR9LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGxhYmVsID0gW25hbWUsIGxvY2FsTmFtZV0uam9pbignJyk7XG5cdFx0XHRcdFx0Y29uc3QgdGV4dCA9IGFsaWduID09PSAncmlnaHQnID8gbG9jYWxOYW1lIDogaWQ7XG5cdFx0XHRcdFx0Y29uc3Qgd2lkdGggPSBNYXRoLm1heCg1LCBsYWJlbC5sZW5ndGggKiAwLjgpO1xuXHRcdFx0XHRcdGNvbnN0IGxhYmVsV2lkdGggPSBNYXRoLm1heCg0LCB0ZXh0Lmxlbmd0aCAqIDAuNik7XG5cdFx0XHRcdFx0Y29uc3Qga2V5ID0gW2lkLCBuYW1lLCBsb2NhbE5hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCc6Jyk7XG5cdFx0XHRcdFx0Y29uc3QgbGFiZWxYID0gYWxpZ24gPT09ICdyaWdodCcgPyB4IC0gd2lkdGggOiB4ICsgd2lkdGg7XG5cdFx0XHRcdFx0Y29uc3Qgb2Zmc2V0ID0gYWxpZ24gPT09ICdyaWdodCcgPyAxIDogMDtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHRcdGFjdGl2ZT17YWN0aXZlQmxvY2sgPT09IGtleX1cblx0XHRcdFx0XHRcdFx0YWxpZ249e2FsaWdufVxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleX1cblx0XHRcdFx0XHRcdFx0d2lkdGg9e2xhYmVsV2lkdGh9XG5cdFx0XHRcdFx0XHRcdGhlaWdodD17MS40fVxuXHRcdFx0XHRcdFx0XHR4PXtsYWJlbFggLSBvZmZzZXR9XG5cdFx0XHRcdFx0XHRcdHk9e3kgKyBpbmRleCAqIChoZWlnaHQgKyAxKSArIChoZWlnaHQgLyAyKSAtIDAuN31cblx0XHRcdFx0XHRcdFx0dGV4dD17dGV4dH1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0XHR7XG5cdFx0XHRcdGl0ZW1zLm1hcChpdGVtID0+IHtcblx0XHRcdFx0XHRjb25zdCBsYWJlbEFsaWduID0gYWxpZ24gPT09ICdsZWZ0JyA/ICdyaWdodCcgOiAnbGVmdCc7XG5cdFx0XHRcdFx0Y29uc3QgdGV4dCA9IGFsaWduID09PSAncmlnaHQnID8gaXRlbS5pZCA6IGl0ZW0ubG9jYWxOYW1lO1xuXHRcdFx0XHRcdGNvbnN0IGtleSA9IFtpdGVtLmlkLCBpdGVtLm5hbWUsIGl0ZW0ubG9jYWxOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignOicpO1xuXHRcdFx0XHRcdGNvbnN0IGxhYmVsV2lkdGggPSBNYXRoLm1heCg0LCB0ZXh0Lmxlbmd0aCAqIDAuNik7XG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHRcdGFjdGl2ZT17YWN0aXZlQmxvY2sgPT09IGtleX1cblx0XHRcdFx0XHRcdFx0YWxpZ249e2xhYmVsQWxpZ259XG5cdFx0XHRcdFx0XHRcdGtleT17a2V5fVxuXHRcdFx0XHRcdFx0XHR0ZXh0PXt0ZXh0fVxuXHRcdFx0XHRcdFx0XHR3aWR0aD17bGFiZWxXaWR0aH1cblx0XHRcdFx0XHRcdFx0aGVpZ2h0PXsxLjR9XG5cdFx0XHRcdFx0XHRcdHg9e2Nvbm5lY3QueH1cblx0XHRcdFx0XHRcdFx0eT17Y29ubmVjdC55IC0gMC43fVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0PC9nPlxuXHQpO1xufVxuXG5CbG9ja0NvbHVtbi5wcm9wVHlwZXMgPSB7XG5cdGJhc2U6IHQuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdGl0ZW1zOiB0LmFycmF5T2YodC5zaGFwZSh7XG5cdFx0bmFtZTogdC5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRpZDogdC5zdHJpbmcuaXNSZXF1aXJlZFxuXHR9KSkuaXNSZXF1aXJlZCxcblx0eDogdC5vbmVPZlR5cGUoW3Quc3RyaW5nLCB0Lm51bWJlcl0pLmlzUmVxdWlyZWQsXG5cdHk6IHQub25lT2ZUeXBlKFt0LnN0cmluZywgdC5udW1iZXJdKS5pc1JlcXVpcmVkLFxuXHRvbkNsaWNrOiB0LmZ1bmMuaXNSZXF1aXJlZCxcblx0YWxpZ246IHQub25lT2YoWydsZWZ0JywgJ3JpZ2h0J10pLmlzUmVxdWlyZWQsXG5cdHByZWZpeDogdC5zdHJpbmcsXG5cdGxvY2F0aW9uOiB0LnNoYXBlKHtcblx0XHRwYXRobmFtZTogdC5zdHJpbmcsXG5cdFx0cXVlcnk6IHQuYW55XG5cdH0pLFxuXHRjb25uZWN0OiB0LnNoYXBlKHtcblx0XHR4OiB0Lm9uZU9mVHlwZShbdC5zdHJpbmcsIHQubnVtYmVyXSkuaXNSZXF1aXJlZCxcblx0XHR5OiB0Lm9uZU9mVHlwZShbdC5zdHJpbmcsIHQubnVtYmVyXSkuaXNSZXF1aXJlZFxuXHR9KS5pc1JlcXVpcmVkLFxuXHRkZXNjcmlwdGlvbjogdC5zdHJpbmcsXG5cdGhlaWdodDogdC5udW1iZXJcbn07XG5cbkJsb2NrQ29sdW1uLmRlZmF1bHRQcm9wcyA9IHtcblx0aXRlbXM6IFtdLFxuXHR5OiAwLFxuXHRvbkNsaWNrOiAoKSA9PiB7fSxcblx0YWxpZ246ICdsZWZ0Jyxcblx0ZGVzY3JpcHRpb246ICcnXG59O1xuXG5mdW5jdGlvbiBMYWJlbChwcm9wcykge1xuXHRpZiAoIXByb3BzLnRleHQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGNvbnN0IHggPSBwcm9wcy5hbGlnbiA9PT0gJ3JpZ2h0JyA/IChwcm9wcy54IC0gcHJvcHMud2lkdGgpIDogcHJvcHMueDtcblx0Y29uc3QgY2xhc3NOYW1lID0gam9pbignbGFiZWwnLCB7XG5cdFx0J2xhYmVsLS1hY3RpdmUnOiBwcm9wcy5hY3RpdmVcblx0fSk7XG5cblx0cmV0dXJuIChcblx0XHQ8ZyBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG5cdFx0XHQ8Y2lyY2xlXG5cdFx0XHRcdGNsYXNzTmFtZT1cImxhYmVsX19jaXJjbGVcIlxuXHRcdFx0XHRjeD17eCArIHByb3BzLndpZHRofVxuXHRcdFx0XHRjeT17cHJvcHMueSArIHByb3BzLmhlaWdodCAvIDJ9XG5cdFx0XHRcdHI9ezAuN31cblx0XHRcdFx0Lz5cblx0XHRcdDxjaXJjbGVcblx0XHRcdFx0Y2xhc3NOYW1lPVwibGFiZWxfX2NpcmNsZVwiXG5cdFx0XHRcdGN4PXt4fVxuXHRcdFx0XHRjeT17cHJvcHMueSArIHByb3BzLmhlaWdodCAvIDJ9XG5cdFx0XHRcdHI9ezAuN31cblx0XHRcdFx0Lz5cblx0XHRcdDxyZWN0XG5cdFx0XHRcdGhlaWdodD17cHJvcHMuaGVpZ2h0fVxuXHRcdFx0XHR3aWR0aD17cHJvcHMud2lkdGh9XG5cdFx0XHRcdHg9e3h9XG5cdFx0XHRcdHk9e3Byb3BzLnl9XG5cdFx0XHRcdGNsYXNzTmFtZT1cImxhYmVsX19jb250YWluZXJcIlxuXHRcdFx0XHQvPlxuXHRcdFx0PHRleHRcblx0XHRcdFx0eD17eCArIHByb3BzLndpZHRoIC8gMn1cblx0XHRcdFx0eT17cHJvcHMueSAtIDAuMTc1ICsgcHJvcHMuaGVpZ2h0IC8gMn1cblx0XHRcdFx0Y2xhc3NOYW1lPVwibGFiZWxfX3RleHRcIj5cblx0XHRcdFx0e3Byb3BzLnRleHR9XG5cdFx0XHQ8L3RleHQ+XG5cdFx0PC9nPlxuXHQpO1xufVxuIl19