patternplate-client
Version:
Universal javascript client application for patternplate
169 lines (147 loc) • 16 kB
JavaScript
'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