UNPKG

react-lightning-design-components

Version:

Salesforce Lightning Design System components built with React 16

353 lines (305 loc) 30.6 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.MenuItem = exports.DropdownMenuItem = undefined; var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); 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 _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames3 = require('classnames'); var _classnames4 = _interopRequireDefault(_classnames3); var _Icon = require('./Icon'); var _Icon2 = _interopRequireDefault(_Icon); var _reactInfiniteScrollContainer = require('react-infinite-scroll-container'); var _reactInfiniteScrollContainer2 = _interopRequireDefault(_reactInfiniteScrollContainer); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var DropdownMenuItem = exports.DropdownMenuItem = function (_Component) { (0, _inherits3.default)(DropdownMenuItem, _Component); function DropdownMenuItem() { (0, _classCallCheck3.default)(this, DropdownMenuItem); return (0, _possibleConstructorReturn3.default)(this, (DropdownMenuItem.__proto__ || (0, _getPrototypeOf2.default)(DropdownMenuItem)).apply(this, arguments)); } (0, _createClass3.default)(DropdownMenuItem, [{ key: 'onKeyDown', value: function onKeyDown(e) { if (e.keyCode === 13 || e.keyCode === 32) { // return or space e.preventDefault(); e.stopPropagation(); if (this.props.onClick) { var _props; for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } (_props = this.props).onClick.apply(_props, [e].concat(args)); } } else if (e.keyCode === 40 || e.keyCode === 38) { e.preventDefault(); e.stopPropagation(); var currentEl = e.target.parentElement; var itemEl = e.keyCode === 40 ? currentEl.nextSibling : currentEl.previousSibling; while (itemEl) { var anchorEl = itemEl.querySelector('.react-slds-menuitem[tabIndex]'); if (anchorEl && !anchorEl.disabled) { anchorEl.focus(); return; } itemEl = e.keyCode === 40 ? itemEl.nextSibling : itemEl.previousSibling; } } } }, { key: 'onBlur', value: function onBlur(e) { if (this.props.onBlur) { this.props.onBlur(e); } } }, { key: 'onFocus', value: function onFocus(e) { if (this.props.onFocus) { this.props.onFocus(e); } } }, { key: 'render', value: function render() { var _props2 = this.props, className = _props2.className, label = _props2.label, icon = _props2.icon, iconRight = _props2.iconRight, selected = _props2.selected, disabled = _props2.disabled, _props2$tabIndex = _props2.tabIndex, tabIndex = _props2$tabIndex === undefined ? 0 : _props2$tabIndex, onClick = _props2.onClick, children = _props2.children, props = (0, _objectWithoutProperties3.default)(_props2, ['className', 'label', 'icon', 'iconRight', 'selected', 'disabled', 'tabIndex', 'onClick', 'children']); var menuItemClass = (0, _classnames4.default)('slds-dropdown__item', { 'slds-is-selected': selected }, className); return _react2.default.createElement( 'li', { className: menuItemClass, disabled: disabled }, _react2.default.createElement( 'a', (0, _extends3.default)({ className: 'slds-truncate react-slds-menuitem', role: 'menuitem', 'aria-disabled': disabled, tabIndex: disabled ? null : tabIndex, onClick: disabled ? null : onClick, onKeyDown: disabled ? null : this.onKeyDown.bind(this), onBlur: disabled ? null : this.onBlur.bind(this), onFocus: disabled ? null : this.onFocus.bind(this) }, props), _react2.default.createElement( 'p', { className: 'slds-truncate' }, icon ? _react2.default.createElement(_Icon2.default, { icon: icon, className: 'slds-pill__icon', align: 'left' }) : null, label || children ), iconRight ? _react2.default.createElement(_Icon2.default, { icon: iconRight, className: 'slds-pill__icon', align: 'right' }) : null ) ); } }]); return DropdownMenuItem; }(_react.Component); DropdownMenuItem.propTypes = { className: _propTypes2.default.string, label: _propTypes2.default.string, icon: _propTypes2.default.string, iconRight: _propTypes2.default.string, disabled: _propTypes2.default.bool, tabIndex: _propTypes2.default.number, selected: _propTypes2.default.bool, onClick: _propTypes2.default.func, onBlur: _propTypes2.default.func, onFocus: _propTypes2.default.func, children: _propTypes2.default.node }; var MenuItem = exports.MenuItem = DropdownMenuItem; var DropdownMenu = function (_Component2) { (0, _inherits3.default)(DropdownMenu, _Component2); function DropdownMenu() { (0, _classCallCheck3.default)(this, DropdownMenu); return (0, _possibleConstructorReturn3.default)(this, (DropdownMenu.__proto__ || (0, _getPrototypeOf2.default)(DropdownMenu)).apply(this, arguments)); } (0, _createClass3.default)(DropdownMenu, [{ key: 'onMenuItemBlur', value: function onMenuItemBlur(e) { if (this.props.onBlur) { this.props.onBlur(e); } } }, { key: 'onMenuItemFocus', value: function onMenuItemFocus(e) { if (this.props.onFocus) { this.props.onFocus(e); } } }, { key: 'onKeyDown', value: function onKeyDown(e) { var keyCodesToCloseMenu = [27].concat(this.props.keyCodesToCloseMenu || []); // ESC and others if (keyCodesToCloseMenu.some(function (num) { return e.keyCode === num; })) { if (this.props.onMenuClose) { this.props.onMenuClose(); } } } }, { key: 'loadMoreData', value: function loadMoreData(page) { if (this.props.onScroll) this.props.onScroll(page); } }, { key: 'renderMenuItem', value: function renderMenuItem(menuItem) { var _this3 = this; if (!menuItem) return null; var _menuItem$props = menuItem.props, onClick = _menuItem$props.onClick, onBlur = _menuItem$props.onBlur, onFocus = _menuItem$props.onFocus, props = (0, _objectWithoutProperties3.default)(_menuItem$props, ['onClick', 'onBlur', 'onFocus']); var onMenuItemClick = function onMenuItemClick() { for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } if (onClick) { onClick.apply(undefined, args); } if (_this3.props.onMenuItemClick) { var _props3; (_props3 = _this3.props).onMenuItemClick.apply(_props3, [props].concat(args)); } }; var onMenuItemFocus = function onMenuItemFocus(e) { if (onFocus) { onFocus(e); } _this3.onMenuItemFocus(e); }; var onMenuItemBlur = function onMenuItemBlur(e) { if (onBlur) { onBlur(e); } _this3.onMenuItemBlur(e); }; return _react2.default.cloneElement(menuItem, { onClick: onMenuItemClick, onBlur: onMenuItemBlur, onFocus: onMenuItemFocus }); } }, { key: 'render', value: function render() { var _classnames; var _props4 = this.props, className = _props4.className, listClassName = _props4.listClassName, _props4$align = _props4.align, align = _props4$align === undefined ? 'left' : _props4$align, size = _props4.size, header = _props4.header, nubbinTop = _props4.nubbinTop, hoverPopup = _props4.hoverPopup, children = _props4.children, maxHeight = _props4.maxHeight, minWidth = _props4.minWidth, onBlur = _props4.onBlur, onFocus = _props4.onFocus; var dropdownMenuClassNames = (0, _classnames4.default)(className, 'slds-dropdown', 'slds-dropdown--menu', 'slds-dropdown--' + align, (_classnames = {}, (0, _defineProperty3.default)(_classnames, 'slds-dropdown--' + size, size), (0, _defineProperty3.default)(_classnames, 'slds-dropdown--nubbin-top', nubbinTop), (0, _defineProperty3.default)(_classnames, 'react-slds-no-hover-popup', !hoverPopup), _classnames)); var minWidthStyle = minWidth && minWidth > 0 ? { minWidth: minWidth } : {}; return _react2.default.createElement( 'div', { className: dropdownMenuClassNames, onKeyDown: this.onKeyDown.bind(this), tabIndex: '-1', onFocus: onFocus, onBlur: onBlur }, header ? _react2.default.createElement( 'div', { className: 'slds-dropdown__header' }, _react2.default.createElement( 'span', { className: 'slds-text-heading--label' }, header ) ) : null, _react2.default.createElement( 'ul', { className: (0, _classnames4.default)(listClassName, 'slds-dropdown__list', (0, _defineProperty3.default)({}, 'slds-dropdown--length-' + maxHeight, maxHeight)), style: minWidthStyle, role: 'menu' }, _react2.default.createElement( _reactInfiniteScrollContainer2.default, { pageStart: this.props.pageStart || 0, loadMore: this.loadMoreData.bind(this), hasMore: !!this.props.hasMore, useWindow: false, element: 'div', initialLoad: false, threshold: 20, resetPageLoader: this.props.resetPageLoader, loader: null }, _react2.default.Children.map(children, this.renderMenuItem.bind(this)) ) ) ); } }]); return DropdownMenu; }(_react.Component); exports.default = DropdownMenu; DropdownMenu.propTypes = { className: _propTypes2.default.string, listClassName: _propTypes2.default.string, align: _propTypes2.default.oneOf(['left', 'center', 'right']), size: _propTypes2.default.oneOf(['small', 'medium', 'large']), header: _propTypes2.default.string, nubbinTop: _propTypes2.default.bool, hoverPopup: _propTypes2.default.bool, onMenuItemClick: _propTypes2.default.func, onMenuClose: _propTypes2.default.func, onBlur: _propTypes2.default.func, onFocus: _propTypes2.default.func, children: _propTypes2.default.node, maxHeight: _propTypes2.default.oneOf([5, 7, 10]), minWidth: _propTypes2.default.number, hasMore: _propTypes2.default.bool, pageStart: _propTypes2.default.number, resetPageLoader: _propTypes2.default.bool, onScroll: _propTypes2.default.func, keyCodesToCloseMenu: _propTypes2.default.arrayOf(_propTypes2.default.number) }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL0Ryb3Bkb3duTWVudS5qcyJdLCJuYW1lcyI6WyJEcm9wZG93bk1lbnVJdGVtIiwiZSIsImtleUNvZGUiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsInByb3BzIiwib25DbGljayIsImFyZ3MiLCJjdXJyZW50RWwiLCJ0YXJnZXQiLCJwYXJlbnRFbGVtZW50IiwiaXRlbUVsIiwibmV4dFNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJhbmNob3JFbCIsInF1ZXJ5U2VsZWN0b3IiLCJkaXNhYmxlZCIsImZvY3VzIiwib25CbHVyIiwib25Gb2N1cyIsImNsYXNzTmFtZSIsImxhYmVsIiwiaWNvbiIsImljb25SaWdodCIsInNlbGVjdGVkIiwidGFiSW5kZXgiLCJjaGlsZHJlbiIsIm1lbnVJdGVtQ2xhc3MiLCJvbktleURvd24iLCJiaW5kIiwicHJvcFR5cGVzIiwic3RyaW5nIiwiYm9vbCIsIm51bWJlciIsImZ1bmMiLCJub2RlIiwiTWVudUl0ZW0iLCJEcm9wZG93bk1lbnUiLCJrZXlDb2Rlc1RvQ2xvc2VNZW51IiwiY29uY2F0Iiwic29tZSIsIm51bSIsIm9uTWVudUNsb3NlIiwicGFnZSIsIm9uU2Nyb2xsIiwibWVudUl0ZW0iLCJvbk1lbnVJdGVtQ2xpY2siLCJvbk1lbnVJdGVtRm9jdXMiLCJvbk1lbnVJdGVtQmx1ciIsImNsb25lRWxlbWVudCIsImxpc3RDbGFzc05hbWUiLCJhbGlnbiIsInNpemUiLCJoZWFkZXIiLCJudWJiaW5Ub3AiLCJob3ZlclBvcHVwIiwibWF4SGVpZ2h0IiwibWluV2lkdGgiLCJkcm9wZG93bk1lbnVDbGFzc05hbWVzIiwibWluV2lkdGhTdHlsZSIsInBhZ2VTdGFydCIsImxvYWRNb3JlRGF0YSIsImhhc01vcmUiLCJyZXNldFBhZ2VMb2FkZXIiLCJDaGlsZHJlbiIsIm1hcCIsInJlbmRlck1lbnVJdGVtIiwib25lT2YiLCJhcnJheU9mIl0sIm1hcHBpbmdzIjoiOzs7Ozs7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RCxFQUFTLFFBQVQsRUFBbUIsT0FBbkIsQ0FBaEIsQ0FIZ0I7QUFJdkJmLFFBQU0sb0JBQVVlLEtBQVYsQ0FBZ0IsQ0FBQyxPQUFELEVBQVUsUUFBVixFQUFvQixPQUFwQixDQUFoQixDQUppQjtBQUt2QmQsVUFBUSxvQkFBVXRCLE1BTEs7QUFNdkJ1QixhQUFXLG9CQUFVdEIsSUFORTtBQU92QnVCLGNBQVksb0JBQVV2QixJQVBDO0FBUXZCYyxtQkFBaUIsb0JBQVVaLElBUko7QUFTdkJRLGVBQWEsb0JBQVVSLElBVEE7QUFVdkJoQixVQUFRLG9CQUFVZ0IsSUFWSztBQVd2QmYsV0FBUyxvQkFBVWUsSUFYSTtBQVl2QlIsWUFBVSxvQkFBVVMsSUFaRztBQWF2QnFCLGFBQVcsb0JBQVVXLEtBQVYsQ0FBZ0IsQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLEVBQVAsQ0FBaEIsQ0FiWTtBQWN2QlYsWUFBVSxvQkFBVXhCLE1BZEc7QUFldkI2QixXQUFTLG9CQUFVOUIsSUFmSTtBQWdCdkI0QixhQUFXLG9CQUFVM0IsTUFoQkU7QUFpQnZCOEIsbUJBQWlCLG9CQUFVL0IsSUFqQko7QUFrQnZCWSxZQUFVLG9CQUFVVixJQWxCRztBQW1CdkJJLHVCQUFxQixvQkFBVThCLE9BQVYsQ0FBa0Isb0JBQVVuQyxNQUE1QjtBQW5CRSxDQUF6QiIsImZpbGUiOiJEcm9wZG93bk1lbnUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24nO1xuaW1wb3J0IEluZmluaXRlU2Nyb2xsIGZyb20gJ3JlYWN0LWluZmluaXRlLXNjcm9sbC1jb250YWluZXInO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuZXhwb3J0IGNsYXNzIERyb3Bkb3duTWVudUl0ZW0gZXh0ZW5kcyBDb21wb25lbnQge1xuICBvbktleURvd24oZSwgLi4uYXJncykge1xuICAgIGlmIChlLmtleUNvZGUgPT09IDEzIHx8IGUua2V5Q29kZSA9PT0gMzIpIHsgLy8gcmV0dXJuIG9yIHNwYWNlXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKHRoaXMucHJvcHMub25DbGljaykge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2xpY2soZSwgLi4uYXJncyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT09IDQwIHx8IGUua2V5Q29kZSA9PT0gMzgpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjb25zdCBjdXJyZW50RWwgPSBlLnRhcmdldC5wYXJlbnRFbGVtZW50O1xuICAgICAgbGV0IGl0ZW1FbCA9IGUua2V5Q29kZSA9PT0gNDAgPyBjdXJyZW50RWwubmV4dFNpYmxpbmcgOiBjdXJyZW50RWwucHJldmlvdXNTaWJsaW5nO1xuICAgICAgd2hpbGUgKGl0ZW1FbCkge1xuICAgICAgICBjb25zdCBhbmNob3JFbCA9IGl0ZW1FbC5xdWVyeVNlbGVjdG9yKCcucmVhY3Qtc2xkcy1tZW51aXRlbVt0YWJJbmRleF0nKTtcbiAgICAgICAgaWYgKGFuY2hvckVsICYmICFhbmNob3JFbC5kaXNhYmxlZCkge1xuICAgICAgICAgIGFuY2hvckVsLmZvY3VzKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1FbCA9IGUua2V5Q29kZSA9PT0gNDAgPyBpdGVtRWwubmV4dFNpYmxpbmcgOiBpdGVtRWwucHJldmlvdXNTaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQmx1cihlKSB7XG4gICAgaWYgKHRoaXMucHJvcHMub25CbHVyKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQmx1cihlKTtcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzKGUpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vbkZvY3VzKSB7XG4gICAgICB0aGlzLnByb3BzLm9uRm9jdXMoZSk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSwgbGFiZWwsIGljb24sIGljb25SaWdodCwgc2VsZWN0ZWQsIGRpc2FibGVkLCB0YWJJbmRleCA9IDAsIG9uQ2xpY2ssIGNoaWxkcmVuLFxuICAgICAgLi4ucHJvcHMsXG4gICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1lbnVJdGVtQ2xhc3MgPSBjbGFzc25hbWVzKFxuICAgICAgJ3NsZHMtZHJvcGRvd25fX2l0ZW0nLFxuICAgICAgeyAnc2xkcy1pcy1zZWxlY3RlZCc6IHNlbGVjdGVkIH0sXG4gICAgICBjbGFzc05hbWVcbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8bGkgY2xhc3NOYW1lPXsgbWVudUl0ZW1DbGFzcyB9IGRpc2FibGVkPXsgZGlzYWJsZWQgfT5cbiAgICAgICAgPGFcbiAgICAgICAgICBjbGFzc05hbWU9J3NsZHMtdHJ1bmNhdGUgcmVhY3Qtc2xkcy1tZW51aXRlbSdcbiAgICAgICAgICByb2xlPSdtZW51aXRlbSdcbiAgICAgICAgICBhcmlhLWRpc2FibGVkPXsgZGlzYWJsZWQgfVxuICAgICAgICAgIHRhYkluZGV4PXsgZGlzYWJsZWQgPyBudWxsIDogdGFiSW5kZXggfVxuICAgICAgICAgIG9uQ2xpY2s9eyBkaXNhYmxlZCA/IG51bGwgOiBvbkNsaWNrIH1cbiAgICAgICAgICBvbktleURvd249eyBkaXNhYmxlZCA/IG51bGwgOiB0aGlzLm9uS2V5RG93bi5iaW5kKHRoaXMpIH1cbiAgICAgICAgICBvbkJsdXI9eyBkaXNhYmxlZCA/IG51bGwgOiB0aGlzLm9uQmx1ci5iaW5kKHRoaXMpIH1cbiAgICAgICAgICBvbkZvY3VzPXsgZGlzYWJsZWQgPyBudWxsIDogdGhpcy5vbkZvY3VzLmJpbmQodGhpcykgfVxuICAgICAgICAgIHsgLi4ucHJvcHMgfVxuICAgICAgICA+XG4gICAgICAgICAgPHAgY2xhc3NOYW1lPSdzbGRzLXRydW5jYXRlJz5cbiAgICAgICAgICAgIHsgaWNvbiA/IDxJY29uIGljb249eyBpY29uIH0gY2xhc3NOYW1lPSdzbGRzLXBpbGxfX2ljb24nIGFsaWduPSdsZWZ0JyAvPiA6IG51bGwgfVxuICAgICAgICAgICAgeyBsYWJlbCB8fCBjaGlsZHJlbiB9XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIHsgaWNvblJpZ2h0ID9cbiAgICAgICAgICAgIDxJY29uIGljb249eyBpY29uUmlnaHQgfSBjbGFzc05hbWU9J3NsZHMtcGlsbF9faWNvbicgYWxpZ249J3JpZ2h0JyAvPiA6XG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgfVxuICAgICAgICA8L2E+XG4gICAgICA8L2xpPlxuICAgICk7XG4gIH1cbn1cblxuRHJvcGRvd25NZW51SXRlbS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGljb246IFByb3BUeXBlcy5zdHJpbmcsXG4gIGljb25SaWdodDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICB0YWJJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbn07XG5cblxuZXhwb3J0IGNvbnN0IE1lbnVJdGVtID0gRHJvcGRvd25NZW51SXRlbTtcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcm9wZG93bk1lbnUgZXh0ZW5kcyBDb21wb25lbnQge1xuICBvbk1lbnVJdGVtQmx1cihlKSB7XG4gICAgaWYgKHRoaXMucHJvcHMub25CbHVyKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQmx1cihlKTtcbiAgICB9XG4gIH1cblxuICBvbk1lbnVJdGVtRm9jdXMoZSkge1xuICAgIGlmICh0aGlzLnByb3BzLm9uRm9jdXMpIHtcbiAgICAgIHRoaXMucHJvcHMub25Gb2N1cyhlKTtcbiAgICB9XG4gIH1cblxuICBvbktleURvd24oZSkge1xuICAgIGNvbnN0IGtleUNvZGVzVG9DbG9zZU1lbnUgPSBbMjddLmNvbmNhdCh0aGlzLnByb3BzLmtleUNvZGVzVG9DbG9zZU1lbnUgfHwgW10pOyAvLyBFU0MgYW5kIG90aGVyc1xuICAgIGlmIChrZXlDb2Rlc1RvQ2xvc2VNZW51LnNvbWUobnVtID0+IGUua2V5Q29kZSA9PT0gbnVtKSkge1xuICAgICAgaWYgKHRoaXMucHJvcHMub25NZW51Q2xvc2UpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxvYWRNb3JlRGF0YShwYWdlKSB7XG4gICAgaWYgKHRoaXMucHJvcHMub25TY3JvbGwpIHRoaXMucHJvcHMub25TY3JvbGwocGFnZSk7XG4gIH1cblxuICByZW5kZXJNZW51SXRlbShtZW51SXRlbSkge1xuICAgIGlmICghbWVudUl0ZW0pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHsgb25DbGljaywgb25CbHVyLCBvbkZvY3VzLCAuLi5wcm9wcyB9ID0gbWVudUl0ZW0ucHJvcHM7XG4gICAgY29uc3Qgb25NZW51SXRlbUNsaWNrID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgIGlmIChvbkNsaWNrKSB7IG9uQ2xpY2soLi4uYXJncyk7IH1cbiAgICAgIGlmICh0aGlzLnByb3BzLm9uTWVudUl0ZW1DbGljaykge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWVudUl0ZW1DbGljayhwcm9wcywgLi4uYXJncyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvbk1lbnVJdGVtRm9jdXMgPSAoZSkgPT4ge1xuICAgICAgaWYgKG9uRm9jdXMpIHsgb25Gb2N1cyhlKTsgfVxuICAgICAgdGhpcy5vbk1lbnVJdGVtRm9jdXMoZSk7XG4gICAgfTtcbiAgICBjb25zdCBvbk1lbnVJdGVtQmx1ciA9IChlKSA9PiB7XG4gICAgICBpZiAob25CbHVyKSB7IG9uQmx1cihlKTsgfVxuICAgICAgdGhpcy5vbk1lbnVJdGVtQmx1cihlKTtcbiAgICB9O1xuICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQobWVudUl0ZW0sIHtcbiAgICAgIG9uQ2xpY2s6IG9uTWVudUl0ZW1DbGljayxcbiAgICAgIG9uQmx1cjogb25NZW51SXRlbUJsdXIsXG4gICAgICBvbkZvY3VzOiBvbk1lbnVJdGVtRm9jdXMsXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLCBsaXN0Q2xhc3NOYW1lLCBhbGlnbiA9ICdsZWZ0Jywgc2l6ZSwgaGVhZGVyLCBudWJiaW5Ub3AsIGhvdmVyUG9wdXAsXG4gICAgICBjaGlsZHJlbiwgbWF4SGVpZ2h0LCBtaW5XaWR0aCwgb25CbHVyLCBvbkZvY3VzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGRyb3Bkb3duTWVudUNsYXNzTmFtZXMgPSBjbGFzc25hbWVzKFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgJ3NsZHMtZHJvcGRvd24nLFxuICAgICAgJ3NsZHMtZHJvcGRvd24tLW1lbnUnLFxuICAgICAgYHNsZHMtZHJvcGRvd24tLSR7YWxpZ259YCxcbiAgICAgIHtcbiAgICAgICAgW2BzbGRzLWRyb3Bkb3duLS0ke3NpemV9YF06IHNpemUsXG4gICAgICAgICdzbGRzLWRyb3Bkb3duLS1udWJiaW4tdG9wJzogbnViYmluVG9wLFxuICAgICAgICAncmVhY3Qtc2xkcy1uby1ob3Zlci1wb3B1cCc6ICFob3ZlclBvcHVwLFxuICAgICAgfVxuICAgICk7XG4gICAgY29uc3QgbWluV2lkdGhTdHlsZSA9IChtaW5XaWR0aCAmJiBtaW5XaWR0aCA+IDApID8gKHsgbWluV2lkdGggfSkgOiAoe30pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17IGRyb3Bkb3duTWVudUNsYXNzTmFtZXMgfVxuICAgICAgICBvbktleURvd249eyB0aGlzLm9uS2V5RG93bi5iaW5kKHRoaXMpIH1cbiAgICAgICAgdGFiSW5kZXg9Jy0xJ1xuICAgICAgICBvbkZvY3VzPXsgb25Gb2N1cyB9XG4gICAgICAgIG9uQmx1cj17IG9uQmx1ciB9XG4gICAgICA+XG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXIgP1xuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3NsZHMtZHJvcGRvd25fX2hlYWRlcic+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nc2xkcy10ZXh0LWhlYWRpbmctLWxhYmVsJz57IGhlYWRlciB9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+IDpcbiAgICAgICAgICBudWxsXG4gICAgICAgIH1cbiAgICAgICAgPHVsXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKFxuICAgICAgICAgICAgbGlzdENsYXNzTmFtZSxcbiAgICAgICAgICAgICdzbGRzLWRyb3Bkb3duX19saXN0JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW2BzbGRzLWRyb3Bkb3duLS1sZW5ndGgtJHttYXhIZWlnaHR9YF06IG1heEhlaWdodCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgIH1cbiAgICAgICAgICBzdHlsZT17bWluV2lkdGhTdHlsZX1cbiAgICAgICAgICByb2xlPSdtZW51J1xuICAgICAgICA+XG4gICAgICAgICAgPEluZmluaXRlU2Nyb2xsXG4gICAgICAgICAgICBwYWdlU3RhcnQ9e3RoaXMucHJvcHMucGFnZVN0YXJ0IHx8IDB9XG4gICAgICAgICAgICBsb2FkTW9yZT17dGhpcy5sb2FkTW9yZURhdGEuYmluZCh0aGlzKX1cbiAgICAgICAgICAgIGhhc01vcmU9eyEhdGhpcy5wcm9wcy5oYXNNb3JlfVxuICAgICAgICAgICAgdXNlV2luZG93PXtmYWxzZX1cbiAgICAgICAgICAgIGVsZW1lbnQ9J2RpdidcbiAgICAgICAgICAgIGluaXRpYWxMb2FkPXtmYWxzZX1cbiAgICAgICAgICAgIHRocmVzaG9sZD17MjB9XG4gICAgICAgICAgICByZXNldFBhZ2VMb2FkZXI9e3RoaXMucHJvcHMucmVzZXRQYWdlTG9hZGVyfVxuICAgICAgICAgICAgbG9hZGVyPXtudWxsfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCB0aGlzLnJlbmRlck1lbnVJdGVtLmJpbmQodGhpcykpIH1cbiAgICAgICAgICA8L0luZmluaXRlU2Nyb2xsPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG59XG5cblxuRHJvcGRvd25NZW51LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBsaXN0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFsnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnXSksXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbJ3NtYWxsJywgJ21lZGl1bScsICdsYXJnZSddKSxcbiAgaGVhZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBudWJiaW5Ub3A6IFByb3BUeXBlcy5ib29sLFxuICBob3ZlclBvcHVwOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25NZW51SXRlbUNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25NZW51Q2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBtYXhIZWlnaHQ6IFByb3BUeXBlcy5vbmVPZihbNSwgNywgMTBdKSxcbiAgbWluV2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGhhc01vcmU6IFByb3BUeXBlcy5ib29sLFxuICBwYWdlU3RhcnQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIHJlc2V0UGFnZUxvYWRlcjogUHJvcFR5cGVzLmJvb2wsXG4gIG9uU2Nyb2xsOiBQcm9wVHlwZXMuZnVuYyxcbiAga2V5Q29kZXNUb0Nsb3NlTWVudTogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlciksXG59O1xuIl19