patternplate-client
Version:
Universal javascript client application for patternplate
181 lines (143 loc) • 14.4 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _class, _class2, _temp;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactRedux = require('react-redux');
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _autobindDecorator = require('autobind-decorator');
var _autobindDecorator2 = _interopRequireDefault(_autobindDecorator);
var _markBlock = require('../../actions/mark-block');
var _markBlock2 = _interopRequireDefault(_markBlock);
var _block = require('./block');
var _block2 = _interopRequireDefault(_block);
var _blockColumn = require('./block-column');
var _blockColumn2 = _interopRequireDefault(_blockColumn);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var PatternDependencies = (0, _autobindDecorator2.default)(_class = (_temp = _class2 = function (_Component) {
(0, _inherits3.default)(PatternDependencies, _Component);
function PatternDependencies() {
(0, _classCallCheck3.default)(this, PatternDependencies);
return (0, _possibleConstructorReturn3.default)(this, (PatternDependencies.__proto__ || (0, _getPrototypeOf2.default)(PatternDependencies)).apply(this, arguments));
}
(0, _createClass3.default)(PatternDependencies, [{
key: 'handleClick',
value: function handleClick(props) {
var id = props.id,
base = props.base;
var location = this.props.location;
var router = this.context.router;
router.push({
pathname: base + 'pattern/' + id,
query: location.query
});
}
}, {
key: 'handleMouseEnter',
value: function handleMouseEnter(id) {
var dispatch = this.props.dispatch;
dispatch((0, _markBlock2.default)({ id: id, active: true }));
}
}, {
key: 'handleMouseLeave',
value: function handleMouseLeave(id) {
var dispatch = this.props.dispatch;
dispatch((0, _markBlock2.default)({ id: id, active: false }));
}
}, {
key: 'render',
value: function render() {
var _props = this.props,
activeBlock = _props.activeBlock,
passedClassName = _props.className,
dependencies = _props.dependencies,
dependents = _props.dependents,
id = _props.id,
base = _props.base,
name = _props.name,
location = _props.location;
var className = (0, _classnames2.default)('pattern-dependencies', passedClassName);
var blockHeight = 4;
var center = 50;
var rootWidth = Math.max(5, name.length * 1.25);
var paddingX = 1;
var rootY = 1;
var columnY = 2;
var offsetY = Math.max(rootY, columnY);
var rootHeight = blockHeight;
var rootYCenter = rootY + rootHeight / 2;
var blockSpace = blockHeight + 1;
var viewBoxHeight = Math.max(Math.max(dependencies.length, dependents.length) * blockSpace + offsetY + 2, blockSpace + offsetY + 2);
return _react2.default.createElement(
'div',
{ className: className },
_react2.default.createElement(
'svg',
{ viewBox: '0 0 100 ' + viewBoxHeight, className: 'pattern-dependencies__stage' },
_react2.default.createElement(_blockColumn2.default, {
activeBlock: activeBlock,
items: dependencies,
base: base,
y: columnY,
x: paddingX,
height: blockHeight,
onClick: this.handleClick,
onMouseEnter: this.handleMouseEnter,
onMouseLeave: this.handleMouseLeave,
description: 'provides for',
location: location,
connect: { x: center - rootWidth / 2, y: rootYCenter }
}),
_react2.default.createElement(_blockColumn2.default, {
activeBlock: activeBlock,
items: dependents,
base: base,
y: columnY,
x: 100,
height: blockHeight,
onClick: this.handleClick,
onMouseEnter: this.handleMouseEnter,
onMouseLeave: this.handleMouseLeave,
align: 'right',
description: 'provides for',
location: location,
connect: { x: center + rootWidth / 2, y: rootYCenter }
}),
_react2.default.createElement(_block2.default, {
type: 'root',
name: name,
id: id,
x: 50 - rootWidth / 2,
y: rootY,
height: rootHeight,
width: rootWidth,
location: location,
base: base
})
)
);
}
}]);
return PatternDependencies;
}(_react.Component), _class2.contextTypes = {
router: _react.PropTypes.any
}, _temp)) || _class;
exports.default = (0, _reactRedux.connect)(function (_ref) {
var activeBlock = _ref.activeBlock;
return { activeBlock: activeBlock };
})(PatternDependencies);
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NvdXJjZS9hcHBsaWNhdGlvbi9jb21wb25lbnRzL3BhdHRlcm4vcGF0dGVybi1kZXBlbmRlbmNpZXMuanMiXSwibmFtZXMiOlsiUGF0dGVybkRlcGVuZGVuY2llcyIsInByb3BzIiwiaWQiLCJiYXNlIiwibG9jYXRpb24iLCJyb3V0ZXIiLCJjb250ZXh0IiwicHVzaCIsInBhdGhuYW1lIiwicXVlcnkiLCJkaXNwYXRjaCIsImFjdGl2ZSIsImFjdGl2ZUJsb2NrIiwicGFzc2VkQ2xhc3NOYW1lIiwiY2xhc3NOYW1lIiwiZGVwZW5kZW5jaWVzIiwiZGVwZW5kZW50cyIsIm5hbWUiLCJibG9ja0hlaWdodCIsImNlbnRlciIsInJvb3RXaWR0aCIsIk1hdGgiLCJtYXgiLCJsZW5ndGgiLCJwYWRkaW5nWCIsInJvb3RZIiwiY29sdW1uWSIsIm9mZnNldFkiLCJyb290SGVpZ2h0Iiwicm9vdFlDZW50ZXIiLCJibG9ja1NwYWNlIiwidmlld0JveEhlaWdodCIsImhhbmRsZUNsaWNrIiwiaGFuZGxlTW91c2VFbnRlciIsImhhbmRsZU1vdXNlTGVhdmUiLCJ4IiwieSIsImNvbnRleHRUeXBlcyIsImFueSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0lBR01BLG1COzs7Ozs7Ozs7OzhCQXlCT0MsSyxFQUFPO0FBQUEsT0FDWEMsRUFEVyxHQUNDRCxLQURELENBQ1hDLEVBRFc7QUFBQSxPQUNQQyxJQURPLEdBQ0NGLEtBREQsQ0FDUEUsSUFETztBQUFBLE9BRVhDLFFBRlcsR0FFQyxLQUFLSCxLQUZOLENBRVhHLFFBRlc7QUFBQSxPQUdYQyxNQUhXLEdBR0QsS0FBS0MsT0FISixDQUdYRCxNQUhXOztBQUlsQkEsVUFBT0UsSUFBUCxDQUFZO0FBQ1hDLGNBQWFMLElBQWIsZ0JBQTRCRCxFQURqQjtBQUVYTyxXQUFPTCxTQUFT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QUFRRyxVQU5UO0FBT0MsYUFBT1IsU0FQUjtBQVFDLGdCQUFVaEIsUUFSWDtBQVNDLFlBQU1EO0FBVFA7QUE5QkQ7QUFERCxJQUREO0FBOENBOzs7NkJBaEdNa0MsWSxHQUFlO0FBQ3JCaEMsU0FBUSxpQkFBRWlDO0FBRFcsQzs7a0JBbUdSLHlCQUFRLGdCQUFtQjtBQUFBLEtBQWpCMUIsV0FBaUIsUUFBakJBLFdBQWlCOztBQUN6QyxRQUFPLEVBQUNBLHdCQUFELEVBQVA7QUFDQSxDQUZjLEVBRVpaLG1CQUZZLEMiLCJmaWxlIjoicGF0dGVybi1kZXBlbmRlbmNpZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtQcm9wVHlwZXMgYXMgdCwgQ29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBqb2luIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IGF1dG9iaW5kIGZyb20gJ2F1dG9iaW5kLWRlY29yYXRvcic7XG5cbmltcG9ydCBtYXJrQmxvY2sgZnJvbSAnLi4vLi4vYWN0aW9ucy9tYXJrLWJsb2NrJztcbmltcG9ydCBCbG9jayBmcm9tICcuL2Jsb2NrJztcbmltcG9ydCBCbG9ja0NvbHVtbiBmcm9tICcuL2Jsb2NrLWNvbHVtbic7XG5cbkBhdXRvYmluZFxuY2xhc3MgUGF0dGVybkRlcGVuZGVuY2llcyBleHRlbmRzIENvbXBvbmVudCB7XG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0YWN0aXZlQmxvY2s6IHQuc3RyaW5nLFxuXHRcdGJhc2U6IHQuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdFx0Y2xhc3NOYW1lOiB0LnN0cmluZyxcblx0XHRpZDogdC5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRuYW1lOiB0LnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdGRlcGVuZGVuY2llczogdC5hcnJheU9mKHQuc2hhcGUoe1xuXHRcdFx0bmFtZTogdC5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRcdGlkOiB0LnN0cmluZy5pc1JlcXVpcmVkXG5cdFx0fSkpLmlzUmVxdWlyZWQsXG5cdFx0ZGVwZW5kZW50czogdC5hcnJheU9mKHQuc2hhcGUoe1xuXHRcdFx0bmFtZTogdC5zdHJpbmcuaXNSZXF1aXJlZCxcblx0XHRcdGlkOiB0LnN0cmluZy5pc1JlcXVpcmVkXG5cdFx0fSkpLmlzUmVxdWlyZWQsXG5cdFx0bG9jYXRpb246IHQuc2hhcGUoe1xuXHRcdFx0cGF0aG5hbWU6IHQuc3RyaW5nLFxuXHRcdFx0cXVlcnk6IHQuYW55XG5cdFx0fSlcblx0fTtcblxuXHRzdGF0aWMgY29udGV4dFR5cGVzID0ge1xuXHRcdHJvdXRlcjogdC5hbnlcblx0fTtcblxuXHRoYW5kbGVDbGljayhwcm9wcykge1xuXHRcdGNvbnN0IHtpZCwgYmFzZX0gPSBwcm9wcztcblx0XHRjb25zdCB7bG9jYXRpb259ID0gdGhpcy5wcm9wcztcblx0XHRjb25zdCB7cm91dGVyfSA9IHRoaXMuY29udGV4dDtcblx0XHRyb3V0ZXIucHVzaCh7XG5cdFx0XHRwYXRobmFtZTogYCR7YmFzZX1wYXR0ZXJuLyR7aWR9YCxcblx0XHRcdHF1ZXJ5OiBsb2NhdGlvbi5xdWVyeVxuXHRcdH0pO1xuXHR9XG5cblx0aGFuZGxlTW91c2VFbnRlcihpZCkge1xuXHRcdGNvbnN0IHtkaXNwYXRjaH0gPSB0aGlzLnByb3BzO1xuXHRcdGRpc3BhdGNoKG1hcmtCbG9jayh7aWQsIGFjdGl2ZTogdHJ1ZX0pKTtcblx0fVxuXG5cdGhhbmRsZU1vdXNlTGVhdmUoaWQpIHtcblx0XHRjb25zdCB7ZGlzcGF0Y2h9ID0gdGhpcy5wcm9wcztcblx0XHRkaXNwYXRjaChtYXJrQmxvY2soe2lkLCBhY3RpdmU6IGZhbHNlfSkpO1xuXHR9XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdGFjdGl2ZUJsb2NrLFxuXHRcdFx0Y2xhc3NOYW1lOiBwYXNzZWRDbGFzc05hbWUsXG5cdFx0XHRkZXBlbmRlbmNpZXMsXG5cdFx0XHRkZXBlbmRlbnRzLFxuXHRcdFx0aWQsXG5cdFx0XHRiYXNlLFxuXHRcdFx0bmFtZSxcblx0XHRcdGxvY2F0aW9uXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cblx0XHRjb25zdCBjbGFzc05hbWUgPSBqb2luKCdwYXR0ZXJuLWRlcGVuZGVuY2llcycsIHBhc3NlZENsYXNzTmFtZSk7XG5cblx0XHRjb25zdCBibG9ja0hlaWdodCA9IDQ7XG5cdFx0Y29uc3QgY2VudGVyID0gNTA7XG5cdFx0Y29uc3Qgcm9vdFdpZHRoID0gTWF0aC5tYXgoNSwgbmFtZS5sZW5ndGggKiAxLjI1KTtcblx0XHRjb25zdCBwYWRkaW5nWCA9IDE7XG5cdFx0Y29uc3Qgcm9vdFkgPSAxO1xuXHRcdGNvbnN0IGNvbHVtblkgPSAyO1xuXHRcdGNvbnN0IG9mZnNldFkgPSBNYXRoLm1heChyb290WSwgY29sdW1uWSk7XG5cdFx0Y29uc3Qgcm9vdEhlaWdodCA9IGJsb2NrSGVpZ2h0O1xuXHRcdGNvbnN0IHJvb3RZQ2VudGVyID0gcm9vdFkgKyByb290SGVpZ2h0IC8gMjtcblx0XHRjb25zdCBibG9ja1NwYWNlID0gYmxvY2tIZWlnaHQgKyAxO1xuXHRcdGNvbnN0IHZpZXdCb3hIZWlnaHQgPSBNYXRoLm1heChNYXRoLm1heChkZXBlbmRlbmNpZXMubGVuZ3RoLCBkZXBlbmRlbnRzLmxlbmd0aCkgKiBibG9ja1NwYWNlICsgb2Zmc2V0WSArIDIsIGJsb2NrU3BhY2UgKyBvZmZzZXRZICsgMik7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG5cdFx0XHRcdDxzdmcgdmlld0JveD17YDAgMCAxMDAgJHt2aWV3Qm94SGVpZ2h0fWB9IGNsYXNzTmFtZT1cInBhdHRlcm4tZGVwZW5kZW5jaWVzX19zdGFnZVwiPlxuXHRcdFx0XHRcdDxCbG9ja0NvbHVtblxuXHRcdFx0XHRcdFx0YWN0aXZlQmxvY2s9e2FjdGl2ZUJsb2NrfVxuXHRcdFx0XHRcdFx0aXRlbXM9e2RlcGVuZGVuY2llc31cblx0XHRcdFx0XHRcdGJhc2U9e2Jhc2V9XG5cdFx0XHRcdFx0XHR5PXtjb2x1bW5ZfVxuXHRcdFx0XHRcdFx0eD17cGFkZGluZ1h9XG5cdFx0XHRcdFx0XHRoZWlnaHQ9e2Jsb2NrSGVpZ2h0fVxuXHRcdFx0XHRcdFx0b25DbGljaz17dGhpcy5oYW5kbGVDbGlja31cblx0XHRcdFx0XHRcdG9uTW91c2VFbnRlcj17dGhpcy5oYW5kbGVNb3VzZUVudGVyfVxuXHRcdFx0XHRcdFx0b25Nb3VzZUxlYXZlPXt0aGlzLmhhbmRsZU1vdXNlTGVhdmV9XG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvbj1cInByb3ZpZGVzIGZvclwiXG5cdFx0XHRcdFx0XHRsb2NhdGlvbj17bG9jYXRpb259XG5cdFx0XHRcdFx0XHRjb25uZWN0PXt7eDogY2VudGVyIC0gcm9vdFdpZHRoIC8gMiwgeTogcm9vdFlDZW50ZXJ9fVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8QmxvY2tDb2x1bW5cblx0XHRcdFx0XHRcdGFjdGl2ZUJsb2NrPXthY3RpdmVCbG9ja31cblx0XHRcdFx0XHRcdGl0ZW1zPXtkZXBlbmRlbnRzfVxuXHRcdFx0XHRcdFx0YmFzZT17YmFzZX1cblx0XHRcdFx0XHRcdHk9e2NvbHVtbll9XG5cdFx0XHRcdFx0XHR4PXsxMDB9XG5cdFx0XHRcdFx0XHRoZWlnaHQ9e2Jsb2NrSGVpZ2h0fVxuXHRcdFx0XHRcdFx0b25DbGljaz17dGhpcy5oYW5kbGVDbGlja31cblx0XHRcdFx0XHRcdG9uTW91c2VFbnRlcj17dGhpcy5oYW5kbGVNb3VzZUVudGVyfVxuXHRcdFx0XHRcdFx0b25Nb3VzZUxlYXZlPXt0aGlzLmhhbmRsZU1vdXNlTGVhdmV9XG5cdFx0XHRcdFx0XHRhbGlnbj1cInJpZ2h0XCJcblx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uPVwicHJvdmlkZXMgZm9yXCJcblx0XHRcdFx0XHRcdGxvY2F0aW9uPXtsb2NhdGlvbn1cblx0XHRcdFx0XHRcdGNvbm5lY3Q9e3t4OiBjZW50ZXIgKyByb290V2lkdGggLyAyLCB5OiByb290WUNlbnRlcn19XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDxCbG9ja1xuXHRcdFx0XHRcdFx0dHlwZT1cInJvb3RcIlxuXHRcdFx0XHRcdFx0bmFtZT17bmFtZX1cblx0XHRcdFx0XHRcdGlkPXtpZH1cblx0XHRcdFx0XHRcdHg9ezUwIC0gcm9vdFdpZHRoIC8gMn1cblx0XHRcdFx0XHRcdHk9e3Jvb3RZfVxuXHRcdFx0XHRcdFx0aGVpZ2h0PXtyb290SGVpZ2h0fVxuXHRcdFx0XHRcdFx0d2lkdGg9e3Jvb3RXaWR0aH1cblx0XHRcdFx0XHRcdGxvY2F0aW9uPXtsb2NhdGlvbn1cblx0XHRcdFx0XHRcdGJhc2U9e2Jhc2V9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L3N2Zz5cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdCgoe2FjdGl2ZUJsb2NrfSkgPT4ge1xuXHRyZXR1cm4ge2FjdGl2ZUJsb2NrfTtcbn0pKFBhdHRlcm5EZXBlbmRlbmNpZXMpO1xuIl19