react-planner-viewer
Version:
react-planner-viewer is a React Component for view plans builded with react-planner in 2D mode
314 lines (251 loc) • 30.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _catalogItem = require('./catalog-item');
var _catalogItem2 = _interopRequireDefault(_catalogItem);
var _catalogBreadcrumb = require('./catalog-breadcrumb');
var _catalogBreadcrumb2 = _interopRequireDefault(_catalogBreadcrumb);
var _catalogPageItem = require('./catalog-page-item');
var _catalogPageItem2 = _interopRequireDefault(_catalogPageItem);
var _catalogTurnBackPageItem = require('./catalog-turn-back-page-item');
var _catalogTurnBackPageItem2 = _interopRequireDefault(_catalogTurnBackPageItem);
var _contentContainer = require('../style/content-container');
var _contentContainer2 = _interopRequireDefault(_contentContainer);
var _contentTitle = require('../style/content-title');
var _contentTitle2 = _interopRequireDefault(_contentTitle);
var _sharedStyle = require('../../shared-style');
var SharedStyle = _interopRequireWildcard(_sharedStyle);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var containerStyle = {
position: 'fixed',
width: 'calc( 100% - 51px)',
height: 'calc( 100% - 20px)',
backgroundColor: '#FFF',
padding: '1em',
left: 50,
overflowY: 'auto',
overflowX: 'hidden',
zIndex: 10
};
var itemsStyle = {
display: 'grid',
gridTemplateColumns: 'repeat(auto-fit, minmax(14em, 1fr))',
gridGap: '10px',
marginTop: '1em'
};
var searchContainer = {
width: '100%',
height: '3em',
padding: '0.625em',
background: '#f7f7f9',
border: '1px solid #e1e1e8',
cursor: 'pointer',
position: 'relative',
boxShadow: '0 1px 6px 0 rgba(0, 0, 0, 0.11), 0 1px 4px 0 rgba(0, 0, 0, 0.11)',
borderRadius: '2px',
transition: 'all .2s ease-in-out',
WebkitTransition: 'all .2s ease-in-out',
marginBottom: '1em'
};
var searchText = {
width: '8em',
display: 'inline-block'
};
var searchInput = {
width: 'calc( 100% - 10em )',
height: '2em',
margin: '0',
padding: '0 1em',
border: '1px solid #EEE'
};
var historyContainer = _extends({}, searchContainer, {
padding: '0.2em 0.625em'
});
var historyElementStyle = {
width: 'auto',
height: '2em',
lineHeight: '2em',
textAlign: 'center',
borderRadius: '1em',
display: 'inline-block',
cursor: 'pointer',
backgroundColor: SharedStyle.PRIMARY_COLOR.alt,
color: SharedStyle.PRIMARY_COLOR.text_main,
textTransform: 'capitalize',
margin: '0.25em',
padding: '0 1em'
};
var CatalogList = function (_Component) {
_inherits(CatalogList, _Component);
function CatalogList(props, context) {
_classCallCheck(this, CatalogList);
var _this = _possibleConstructorReturn(this, (CatalogList.__proto__ || Object.getPrototypeOf(CatalogList)).call(this, props));
var page = props.state.catalog.page;
var currentCategory = context.catalog.getCategory(page);
var categoriesToDisplay = currentCategory.categories;
var elementsToDisplay = currentCategory.elements.filter(function (element) {
return element.info.visibility ? element.info.visibility.catalog : true;
});
_this.state = {
categories: currentCategory.categories,
elements: elementsToDisplay,
matchString: '',
matchedElements: []
};
return _this;
}
_createClass(CatalogList, [{
key: 'flattenCategories',
value: function flattenCategories(categories) {
var toRet = [];
for (var x = 0; x < categories.length; x++) {
var curr = categories[x];
toRet = toRet.concat(curr.elements);
if (curr.categories.length) toRet = toRet.concat(this.flattenCategories(curr.categories));
}
return toRet;
}
}, {
key: 'matcharray',
value: function matcharray(text) {
var array = this.state.elements.concat(this.flattenCategories(this.state.categories));
var filtered = [];
if (text != '') {
var regexp = new RegExp(text, 'i');
for (var i = 0; i < array.length; i++) {
if (regexp.test(array[i].info.title)) {
filtered.push(array[i]);
}
}
}
this.setState({
matchString: text,
matchedElements: filtered
});
}
}, {
key: 'select',
value: function select(element) {
switch (element.prototype) {
case 'lines':
this.context.linesActions.selectToolDrawingLine(element.name);
break;
case 'items':
this.context.itemsActions.selectToolDrawingItem(element.name);
break;
case 'holes':
this.context.holesActions.selectToolDrawingHole(element.name);
break;
}
this.context.projectActions.pushLastSelectedCatalogElementToHistory(element);
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
var page = this.props.state.catalog.page;
var currentCategory = this.context.catalog.getCategory(page);
var categoriesToDisplay = currentCategory.categories;
var elementsToDisplay = currentCategory.elements.filter(function (element) {
return element.info.visibility ? element.info.visibility.catalog : true;
});
var breadcrumbComponent = null;
if (page !== 'root') {
var breadcrumbsNames = [];
this.props.state.catalog.path.forEach(function (pathName) {
breadcrumbsNames.push({
name: _this2.context.catalog.getCategory(pathName).label,
action: function action() {
return projectActions.goBackToCatalogPage(pathName);
}
});
});
breadcrumbsNames.push({ name: currentCategory.label, action: '' });
breadcrumbComponent = _react2.default.createElement(_catalogBreadcrumb2.default, { names: breadcrumbsNames });
}
var pathSize = this.props.state.catalog.path.size;
var turnBackButton = pathSize > 0 ? _react2.default.createElement(_catalogTurnBackPageItem2.default, { key: pathSize, page: this.context.catalog.categories[this.props.state.catalog.path.get(pathSize - 1)] }) : null;
var selectedHistory = this.props.state.get('selectedElementsHistory');
var selectedHistoryElements = selectedHistory.map(function (el, ind) {
return _react2.default.createElement(
'div',
{ key: ind, style: historyElementStyle, title: el.name, onClick: function onClick() {
return _this2.select(el);
} },
el.name
);
});
return _react2.default.createElement(
_contentContainer2.default,
{ width: this.props.width, height: this.props.height, style: _extends({}, containerStyle, this.props.style) },
_react2.default.createElement(
_contentTitle2.default,
null,
this.context.translator.t('Catalog')
),
breadcrumbComponent,
_react2.default.createElement(
'div',
{ style: searchContainer },
_react2.default.createElement(
'span',
{ style: searchText },
this.context.translator.t('Search Element')
),
_react2.default.createElement('input', { type: 'text', style: searchInput, onChange: function onChange(e) {
_this2.matcharray(e.target.value);
} })
),
selectedHistory.size ? _react2.default.createElement(
'div',
{ style: historyContainer },
_react2.default.createElement(
'span',
null,
this.context.translator.t('Last Selected')
),
selectedHistoryElements
) : null,
_react2.default.createElement(
'div',
{ style: itemsStyle },
this.state.matchString === '' ? [turnBackButton, categoriesToDisplay.map(function (cat) {
return _react2.default.createElement(_catalogPageItem2.default, { key: cat.name, page: cat, oldPage: currentCategory });
}), elementsToDisplay.map(function (elem) {
return _react2.default.createElement(_catalogItem2.default, { key: elem.name, element: elem });
})] : this.state.matchedElements.map(function (elem) {
return _react2.default.createElement(_catalogItem2.default, { key: elem.name, element: elem });
})
)
);
}
}]);
return CatalogList;
}(_react.Component);
exports.default = CatalogList;
CatalogList.propTypes = {
state: _propTypes2.default.object.isRequired,
width: _propTypes2.default.number.isRequired,
height: _propTypes2.default.number.isRequired,
style: _propTypes2.default.object
};
CatalogList.contextTypes = {
catalog: _propTypes2.default.object.isRequired,
translator: _propTypes2.default.object.isRequired,
itemsActions: _propTypes2.default.object.isRequired,
linesActions: _propTypes2.default.object.isRequired,
holesActions: _propTypes2.default.object.isRequired,
projectActions: _propTypes2.default.object.isRequired
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NhdGFsb2ctdmlldy9jYXRhbG9nLWxpc3QuanN4Il0sIm5hbWVzIjpbIlNoYXJlZFN0eWxlIiwiY29udGFpbmVyU3R5bGUiLCJwb3NpdGlvbiIsIndpZHRoIiwiaGVpZ2h0IiwiYmFja2dyb3VuZENvbG9yIiwicGFkZGluZyIsImxlZnQiLCJvdmVyZmxvd1kiLCJvdmVyZmxvd1giLCJ6SW5kZXgiLCJpdGVtc1N0eWxlIiwiZGlzcGxheSIsImdyaWRUZW1wbGF0ZUNvbHVtbnMiLCJncmlkR2FwIiwibWFyZ2luVG9wIiwic2VhcmNoQ29udGFpbmVyIiwiYmFja2dyb3VuZCIsImJvcmRlciIsImN1cnNvciIsImJveFNoYWRvdyIsImJvcmRlclJhZGl1cyIsInRyYW5zaXRpb24iLCJXZWJraXRUcmFuc2l0aW9uIiwibWFyZ2luQm90dG9tIiwic2VhcmNoVGV4dCIsInNlYXJjaElucHV0IiwibWFyZ2luIiwiaGlzdG9yeUNvbnRhaW5lciIsImhpc3RvcnlFbGVtZW50U3R5bGUiLCJsaW5lSGVpZ2h0IiwidGV4dEFsaWduIiwiUFJJTUFSWV9DT0xPUiIsImFsdCIsImNvbG9yIiwidGV4dF9tYWluIiwidGV4dFRyYW5zZm9ybSIsIkNhdGFsb2dMaXN0IiwicHJvcHMiLCJjb250ZXh0IiwicGFnZSIsInN0YXRlIiwiY2F0YWxvZyIsImN1cnJlbnRDYXRlZ29yeSIsImdldENhdGVnb3J5IiwiY2F0ZWdvcmllc1RvRGlzcGxheSIsImNhdGVnb3JpZXMiLCJlbGVtZW50c1RvRGlzcGxheSIsImVsZW1lbnRzIiwiZmlsdGVyIiwiZWxlbWVudCIsImluZm8iLCJ2aXNpYmlsaXR5IiwibWF0Y2hTdHJpbmciLCJtYXRjaGVkRWxlbWVudHMiLCJ0b1JldCIsIngiLCJsZW5ndGgiLCJjdXJyIiwiY29uY2F0IiwiZmxhdHRlbkNhdGVnb3JpZXMiLCJ0ZXh0IiwiYXJyYXkiLCJmaWx0ZXJlZCIsInJlZ2V4cCIsIlJlZ0V4cCIsImkiLCJ0ZXN0IiwidGl0bGUiLCJwdXNoIiwic2V0U3RhdGUiLCJwcm90b3R5cGUiLCJsaW5lc0FjdGlvbnMiLCJzZWxlY3RUb29sRHJhd2luZ0xpbmUiLCJuYW1lIiwiaXRlbXNBY3Rpb25zIiwic2VsZWN0VG9vbERyYXdpbmdJdGVtIiwiaG9sZXNBY3Rpb25zIiwic2VsZWN0VG9vbERyYXdpbmdIb2xlIiwicHJvamVjdEFjdGlvbnMiLCJwdXNoTGFzdFNlbGVjdGVkQ2F0YWxvZ0VsZW1lbnRUb0hpc3RvcnkiLCJicmVhZGNydW1iQ29tcG9uZW50IiwiYnJlYWRjcnVtYnNOYW1lcyIsInBhdGgiLCJmb3JFYWNoIiwicGF0aE5hbWUiLCJsYWJlbCIsImFjdGlvbiIsImdvQmFja1RvQ2F0YWxvZ1BhZ2UiLCJwYXRoU2l6ZSIsInNpemUiLCJ0dXJuQmFja0J1dHRvbiIsImdldCIsInNlbGVjdGVkSGlzdG9yeSIsInNlbGVjdGVkSGlzdG9yeUVsZW1lbnRzIiwibWFwIiwiZWwiLCJpbmQiLCJzZWxlY3QiLCJzdHlsZSIsInRyYW5zbGF0b3IiLCJ0IiwiZSIsIm1hdGNoYXJyYXkiLCJ0YXJnZXQiLCJ2YWx1ZSIsImNhdCIsImVsZW0iLCJwcm9wVHlwZXMiLCJvYmplY3QiLCJpc1JlcXVpcmVkIiwibnVtYmVyIiwiY29udGV4dFR5cGVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztJQUFZQSxXOzs7Ozs7Ozs7Ozs7QUFFWixJQUFNQyxpQkFBaUI7QUFDckJDLFlBQVUsT0FEVztBQUVyQkMsU0FBTSxvQkFGZTtBQUdyQkMsVUFBTyxvQkFIYztBQUlyQkMsbUJBQWdCLE1BSks7QUFLckJDLFdBQVEsS0FMYTtBQU1yQkMsUUFBSyxFQU5nQjtBQU9yQkMsYUFBVSxNQVBXO0FBUXJCQyxhQUFVLFFBUlc7QUFTckJDLFVBQU87QUFUYyxDQUF2Qjs7QUFZQSxJQUFNQyxhQUFhO0FBQ2pCQyxXQUFTLE1B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LG9CQUFVcUMsTUFBVixDQUFpQkMsVUFKTjtBQUt6QmpDLGdCQUFjLG9CQUFVZ0MsTUFBVixDQUFpQkMsVUFMTjtBQU16Qi9CLGtCQUFnQixvQkFBVThCLE1BQVYsQ0FBaUJDO0FBTlIsQ0FBM0IiLCJmaWxlIjoiY2F0YWxvZy1saXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgQ2F0YWxvZ0l0ZW0gZnJvbSAnLi9jYXRhbG9nLWl0ZW0nO1xuaW1wb3J0IENhdGFsb2dCcmVhZGNydW1iIGZyb20gJy4vY2F0YWxvZy1icmVhZGNydW1iJztcbmltcG9ydCBDYXRhbG9nUGFnZUl0ZW0gZnJvbSAnLi9jYXRhbG9nLXBhZ2UtaXRlbSc7XG5pbXBvcnQgQ2F0YWxvZ1R1cm5CYWNrUGFnZUl0ZW0gZnJvbSAnLi9jYXRhbG9nLXR1cm4tYmFjay1wYWdlLWl0ZW0nO1xuaW1wb3J0IENvbnRlbnRDb250YWluZXIgZnJvbSAnLi4vc3R5bGUvY29udGVudC1jb250YWluZXInO1xuaW1wb3J0IENvbnRlbnRUaXRsZSBmcm9tICcuLi9zdHlsZS9jb250ZW50LXRpdGxlJztcbmltcG9ydCAqIGFzIFNoYXJlZFN0eWxlIGZyb20gJy4uLy4uL3NoYXJlZC1zdHlsZSc7XG5cbmNvbnN0IGNvbnRhaW5lclN0eWxlID0ge1xuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgd2lkdGg6J2NhbGMoIDEwMCUgLSA1MXB4KScsXG4gIGhlaWdodDonY2FsYyggMTAwJSAtIDIwcHgpJyxcbiAgYmFja2dyb3VuZENvbG9yOicjRkZGJyxcbiAgcGFkZGluZzonMWVtJyxcbiAgbGVmdDo1MCxcbiAgb3ZlcmZsb3dZOidhdXRvJyxcbiAgb3ZlcmZsb3dYOidoaWRkZW4nLFxuICB6SW5kZXg6MTBcbn07XG5cbmNvbnN0IGl0ZW1zU3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdncmlkJyxcbiAgZ3JpZFRlbXBsYXRlQ29sdW1uczogJ3JlcGVhdChhdXRvLWZpdCwgbWlubWF4KDE0ZW0sIDFmcikpJyxcbiAgZ3JpZEdhcDogJzEwcHgnLFxuICBtYXJnaW5Ub3A6ICcxZW0nXG59O1xuXG5jb25zdCBzZWFyY2hDb250YWluZXIgPSB7XG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzNlbScsXG4gIHBhZGRpbmc6ICcwLjYyNWVtJyxcbiAgYmFja2dyb3VuZDogJyNmN2Y3ZjknLFxuICBib3JkZXI6ICcxcHggc29saWQgI2UxZTFlOCcsXG4gIGN1cnNvcjogJ3BvaW50ZXInLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgYm94U2hhZG93OiAnMCAxcHggNnB4IDAgcmdiYSgwLCAwLCAwLCAwLjExKSwgMCAxcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjExKScsXG4gIGJvcmRlclJhZGl1czogJzJweCcsXG4gIHRyYW5zaXRpb246ICdhbGwgLjJzIGVhc2UtaW4tb3V0JyxcbiAgV2Via2l0VHJhbnNpdGlvbjogJ2FsbCAuMnMgZWFzZS1pbi1vdXQnLFxuICBtYXJnaW5Cb3R0b206ICcxZW0nXG59O1xuXG5jb25zdCBzZWFyY2hUZXh0ID0ge1xuICB3aWR0aDogJzhlbScsXG4gIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snXG59O1xuXG5jb25zdCBzZWFyY2hJbnB1dCA9IHtcbiAgd2lkdGg6ICdjYWxjKCAxMDAlIC0gMTBlbSApJyxcbiAgaGVpZ2h0OiAnMmVtJyxcbiAgbWFyZ2luOiAnMCcsXG4gIHBhZGRpbmc6ICcwIDFlbScsXG4gIGJvcmRlcjogJzFweCBzb2xpZCAjRUVFJ1xufTtcblxuY29uc3QgaGlzdG9yeUNvbnRhaW5lciA9IHtcbiAgLi4uc2VhcmNoQ29udGFpbmVyLFxuICBwYWRkaW5nOiAnMC4yZW0gMC42MjVlbSdcbn07XG5cbmNvbnN0IGhpc3RvcnlFbGVtZW50U3R5bGUgPSB7XG4gIHdpZHRoOiAnYXV0bycsXG4gIGhlaWdodDogJzJlbScsXG4gIGxpbmVIZWlnaHQ6ICcyZW0nLFxuICB0ZXh0QWxpZ246J2NlbnRlcicsXG4gIGJvcmRlclJhZGl1czogJzFlbScsXG4gIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgYmFja2dyb3VuZENvbG9yOiBTaGFyZWRTdHlsZS5QUklNQVJZX0NPTE9SLmFsdCxcbiAgY29sb3I6IFNoYXJlZFN0eWxlLlBSSU1BUllfQ09MT1IudGV4dF9tYWluLFxuICB0ZXh0VHJhbnNmb3JtOiAnY2FwaXRhbGl6ZScsXG4gIG1hcmdpbjogJzAuMjVlbScsXG4gIHBhZGRpbmc6ICcwIDFlbSdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhdGFsb2dMaXN0IGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcywgY29udGV4dCkge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIGxldCBwYWdlID0gcHJvcHMuc3RhdGUuY2F0YWxvZy5wYWdlO1xuICAgIGxldCBjdXJyZW50Q2F0ZWdvcnkgPSBjb250ZXh0LmNhdGFsb2cuZ2V0Q2F0ZWdvcnkocGFnZSk7XG4gICAgbGV0IGNhdGVnb3JpZXNUb0Rpc3BsYXkgPSBjdXJyZW50Q2F0ZWdvcnkuY2F0ZWdvcmllcztcbiAgICBsZXQgZWxlbWVudHNUb0Rpc3BsYXkgPSBjdXJyZW50Q2F0ZWdvcnkuZWxlbWVudHMuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudC5pbmZvLnZpc2liaWxpdHkgPyBlbGVtZW50LmluZm8udmlzaWJpbGl0eS5jYXRhbG9nIDogdHJ1ZSApO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNhdGVnb3JpZXM6IGN1cnJlbnRDYXRlZ29yeS5jYXRlZ29yaWVzLFxuICAgICAgZWxlbWVudHM6IGVsZW1lbnRzVG9EaXNwbGF5LFxuICAgICAgbWF0Y2hTdHJpbmc6ICcnLFxuICAgICAgbWF0Y2hlZEVsZW1lbnRzOiBbXVxuICAgIH07XG4gIH1cblxuICBmbGF0dGVuQ2F0ZWdvcmllcyggY2F0ZWdvcmllcyApIHtcbiAgICBsZXQgdG9SZXQgPSBbXTtcblxuICAgIGZvciggbGV0IHggPSAwOyB4IDwgY2F0ZWdvcmllcy5sZW5ndGg7IHgrKyApXG4gICAge1xuICAgICAgbGV0IGN1cnIgPSBjYXRlZ29yaWVzW3hdO1xuICAgICAgdG9SZXQgPSB0b1JldC5jb25jYXQoIGN1cnIuZWxlbWVudHMgKTtcbiAgICAgIGlmKCBjdXJyLmNhdGVnb3JpZXMubGVuZ3RoICkgdG9SZXQgPSB0b1JldC5jb25jYXQoIHRoaXMuZmxhdHRlbkNhdGVnb3JpZXMgKCBjdXJyLmNhdGVnb3JpZXMgKSApO1xuICAgIH1cblxuICAgIHJldHVybiB0b1JldDtcbiAgfVxuXG4gIG1hdGNoYXJyYXkoIHRleHQgKSB7XG5cbiAgICBsZXQgYXJyYXkgPSB0aGlzLnN0YXRlLmVsZW1lbnRzLmNvbmNhdCggdGhpcy5mbGF0dGVuQ2F0ZWdvcmllcyggdGhpcy5zdGF0ZS5jYXRlZ29yaWVzICkgKTtcblxuICAgIGxldCBmaWx0ZXJlZCA9IFtdO1xuXG4gICAgaWYoIHRleHQgIT0gJycgKSB7XG4gICAgICBsZXQgcmVnZXhwID0gbmV3IFJlZ0V4cCggdGV4dCwgJ2knKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlZ2V4cC50ZXN0KGFycmF5W2ldLmluZm8udGl0bGUpKSB7XG4gICAgICAgICAgZmlsdGVyZWQucHVzaChhcnJheVtpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIG1hdGNoU3RyaW5nOiB0ZXh0LFxuICAgICAgbWF0Y2hlZEVsZW1lbnRzOiBmaWx0ZXJlZFxuICAgIH0pO1xuICB9O1xuXG4gIHNlbGVjdCggZWxlbWVudCApIHtcblxuICAgIHN3aXRjaCAoZWxlbWVudC5wcm90b3R5cGUpIHtcbiAgICAgIGNhc2UgJ2xpbmVzJzpcbiAgICAgICAgdGhpcy5jb250ZXh0LmxpbmVzQWN0aW9ucy5zZWxlY3RUb29sRHJhd2luZ0xpbmUoZWxlbWVudC5uYW1lKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpdGVtcyc6XG4gICAgICAgIHRoaXMuY29udGV4dC5pdGVtc0FjdGlvbnMuc2VsZWN0VG9vbERyYXdpbmdJdGVtKGVsZW1lbnQubmFtZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaG9sZXMnOlxuICAgICAgICB0aGlzLmNvbnRleHQuaG9sZXNBY3Rpb25zLnNlbGVjdFRvb2xEcmF3aW5nSG9sZShlbGVtZW50Lm5hbWUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRleHQucHJvamVjdEFjdGlvbnMucHVzaExhc3RTZWxlY3RlZENhdGFsb2dFbGVtZW50VG9IaXN0b3J5KGVsZW1lbnQpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuXG4gICAgbGV0IHBhZ2UgPSB0aGlzLnByb3BzLnN0YXRlLmNhdGFsb2cucGFnZTtcbiAgICBsZXQgY3VycmVudENhdGVnb3J5ID0gdGhpcy5jb250ZXh0LmNhdGFsb2cuZ2V0Q2F0ZWdvcnkocGFnZSk7XG4gICAgbGV0IGNhdGVnb3JpZXNUb0Rpc3BsYXkgPSBjdXJyZW50Q2F0ZWdvcnkuY2F0ZWdvcmllcztcbiAgICBsZXQgZWxlbWVudHNUb0Rpc3BsYXkgPSBjdXJyZW50Q2F0ZWdvcnkuZWxlbWVudHMuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudC5pbmZvLnZpc2liaWxpdHkgPyBlbGVtZW50LmluZm8udmlzaWJpbGl0eS5jYXRhbG9nIDogdHJ1ZSApO1xuXG4gICAgbGV0IGJyZWFkY3J1bWJDb21wb25lbnQgPSBudWxsO1xuXG4gICAgaWYgKHBhZ2UgIT09ICdyb290Jykge1xuXG4gICAgICBsZXQgYnJlYWRjcnVtYnNOYW1lcyA9IFtdO1xuXG4gICAgICB0aGlzLnByb3BzLnN0YXRlLmNhdGFsb2cucGF0aC5mb3JFYWNoKHBhdGhOYW1lID0+IHtcbiAgICAgICAgYnJlYWRjcnVtYnNOYW1lcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiB0aGlzLmNvbnRleHQuY2F0YWxvZy5nZXRDYXRlZ29yeShwYXRoTmFtZSkubGFiZWwsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiBwcm9qZWN0QWN0aW9ucy5nb0JhY2tUb0NhdGFsb2dQYWdlKHBhdGhOYW1lKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBicmVhZGNydW1ic05hbWVzLnB1c2goe25hbWU6IGN1cnJlbnRDYXRlZ29yeS5sYWJlbCwgYWN0aW9uOiAnJ30pO1xuXG4gICAgICBicmVhZGNydW1iQ29tcG9uZW50ID0gKDxDYXRhbG9nQnJlYWRjcnVtYiBuYW1lcz17YnJlYWRjcnVtYnNOYW1lc30vPik7XG4gICAgfVxuXG4gICAgbGV0IHBhdGhTaXplID0gdGhpcy5wcm9wcy5zdGF0ZS5jYXRhbG9nLnBhdGguc2l6ZTtcblxuICAgIGxldCB0dXJuQmFja0J1dHRvbiA9IHBhdGhTaXplID4gMCA/IChcbiAgICAgIDxDYXRhbG9nVHVybkJhY2tQYWdlSXRlbSBrZXk9e3BhdGhTaXplfSBwYWdlPXt0aGlzLmNvbnRleHQuY2F0YWxvZy5jYXRlZ29yaWVzW3RoaXMucHJvcHMuc3RhdGUuY2F0YWxvZy5wYXRoLmdldChwYXRoU2l6ZSAtIDEpXX0vPikgOiBudWxsO1xuXG5cbiAgICBsZXQgc2VsZWN0ZWRIaXN0b3J5ID0gdGhpcy5wcm9wcy5zdGF0ZS5nZXQoJ3NlbGVjdGVkRWxlbWVudHNIaXN0b3J5Jyk7XG4gICAgbGV0IHNlbGVjdGVkSGlzdG9yeUVsZW1lbnRzID0gc2VsZWN0ZWRIaXN0b3J5Lm1hcCggKCBlbCwgaW5kICkgPT5cbiAgICAgIDxkaXYga2V5PXtpbmR9IHN0eWxlPXtoaXN0b3J5RWxlbWVudFN0eWxlfSB0aXRsZT17ZWwubmFtZX0gb25DbGljaz17KCkgPT4gdGhpcy5zZWxlY3QoZWwpIH0+e2VsLm5hbWV9PC9kaXY+XG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q29udGVudENvbnRhaW5lciB3aWR0aD17dGhpcy5wcm9wcy53aWR0aH0gaGVpZ2h0PXt0aGlzLnByb3BzLmhlaWdodH0gc3R5bGU9e3suLi5jb250YWluZXJTdHlsZSwgLi4udGhpcy5wcm9wcy5zdHlsZX19PlxuICAgICAgICA8Q29udGVudFRpdGxlPnt0aGlzLmNvbnRleHQudHJhbnNsYXRvci50KCdDYXRhbG9nJyl9PC9Db250ZW50VGl0bGU+XG4gICAgICAgIHticmVhZGNydW1iQ29tcG9uZW50fVxuICAgICAgICA8ZGl2IHN0eWxlPXtzZWFyY2hDb250YWluZXJ9PlxuICAgICAgICAgIDxzcGFuIHN0eWxlPXtzZWFyY2hUZXh0fT57dGhpcy5jb250ZXh0LnRyYW5zbGF0b3IudCgnU2VhcmNoIEVsZW1lbnQnKX08L3NwYW4+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgc3R5bGU9e3NlYXJjaElucHV0fSBvbkNoYW5nZT17KCBlICkgPT4geyB0aGlzLm1hdGNoYXJyYXkoIGUudGFyZ2V0LnZhbHVlICk7IH0gfS8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7IHNlbGVjdGVkSGlzdG9yeS5zaXplID9cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtoaXN0b3J5Q29udGFpbmVyfT5cbiAgICAgICAgICAgIDxzcGFuPnt0aGlzLmNvbnRleHQudHJhbnNsYXRvci50KCdMYXN0IFNlbGVjdGVkJyl9PC9zcGFuPlxuICAgICAgICAgICAge3NlbGVjdGVkSGlzdG9yeUVsZW1lbnRzfVxuICAgICAgICAgIDwvZGl2PiA6XG4gICAgICAgICAgbnVsbFxuICAgICAgICB9XG4gICAgICAgIDxkaXYgc3R5bGU9e2l0ZW1zU3R5bGV9PlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUubWF0Y2hTdHJpbmcgPT09ICcnID8gW1xuICAgICAgICAgICAgICB0dXJuQmFja0J1dHRvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcmllc1RvRGlzcGxheS5tYXAoY2F0ID0+IDxDYXRhbG9nUGFnZUl0ZW0ga2V5PXtjYXQubmFtZX0gcGFnZT17Y2F0fSBvbGRQYWdlPXtjdXJyZW50Q2F0ZWdvcnl9Lz4pLFxuICAgICAgICAgICAgICBlbGVtZW50c1RvRGlzcGxheS5tYXAoZWxlbSA9PiA8Q2F0YWxvZ0l0ZW0ga2V5PXtlbGVtLm5hbWV9IGVsZW1lbnQ9e2VsZW19Lz4pXG4gICAgICAgICAgICBdIDpcbiAgICAgICAgICAgIHRoaXMuc3RhdGUubWF0Y2hlZEVsZW1lbnRzLm1hcChlbGVtID0+IDxDYXRhbG9nSXRlbSBrZXk9e2VsZW0ubmFtZX0gZWxlbWVudD17ZWxlbX0vPilcbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9Db250ZW50Q29udGFpbmVyPlxuICAgIClcbiAgfVxufVxuXG5DYXRhbG9nTGlzdC5wcm9wVHlwZXMgPSB7XG4gIHN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIGhlaWdodDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdFxufTtcblxuQ2F0YWxvZ0xpc3QuY29udGV4dFR5cGVzID0ge1xuICBjYXRhbG9nOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIHRyYW5zbGF0b3I6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgaXRlbXNBY3Rpb25zOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGxpbmVzQWN0aW9uczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBob2xlc0FjdGlvbnM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgcHJvamVjdEFjdGlvbnM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZFxufTtcbiJdfQ==