UNPKG

focus-components-v3

Version:

Focus web components to build applications (based on Material Design)

246 lines (200 loc) 26.6 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); 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 _reactDom = require('react-dom'); var _reactDom2 = _interopRequireDefault(_reactDom); var _i18next = require('i18next'); var _i18next2 = _interopRequireDefault(_i18next); var _find = require('lodash/find'); var _find2 = _interopRequireDefault(_find); var _lang = require('lodash/lang'); var _union = require('lodash/union'); var _union2 = _interopRequireDefault(_union); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return 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) : _defaults(subClass, superClass); } //dependencies var UNSELECTED_KEY = 'UNSELECTED_KEY'; /** * Parse the value. * @param {string | number} propsValue - The value given as props to read the type. * @param {string} rawValue - The raw string value. * @return {strint | number} - The parsed value. */ function _valueParser(propsValue, rawValue) { var returnValue = rawValue ? rawValue : propsValue; if (UNSELECTED_KEY === rawValue) { return null; } var type = this.props.type; return type === 'number' ? +returnValue : returnValue; } /** * Component standing for an HTML input. * https://github.com/CreativeIT/getmdl-select/ */ var Select = function (_PureComponent) { _inherits(Select, _PureComponent); function Select() { var _temp, _this, _ret; _classCallCheck(this, Select); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = _possibleConstructorReturn(this, _PureComponent.call.apply(_PureComponent, [this].concat(args))), _this), _this.getValue = function () { var _this$props = _this.props, type = _this$props.type, rawInputValue = _this$props.rawInputValue; if ((0, _lang.isNull)(rawInputValue) || (0, _lang.isUndefined)(rawInputValue) || UNSELECTED_KEY === rawInputValue) return null; return type === 'number' ? +rawInputValue : rawInputValue; }, _this._handleSelectChange = function (val, value) { var _this$props2 = _this.props, onChange = _this$props2.onChange, valueParser = _this$props2.valueParser, rawInputValue = _this$props2.rawInputValue; _reactDom2.default.findDOMNode(_this.refs["selectMenu"]).parentNode.classList.remove('is-visible'); return onChange(valueParser.call(_this, rawInputValue, value)); }, _temp), _possibleConstructorReturn(_this, _ret); } Select.prototype.componentDidMount = function componentDidMount() { var selectMenu = _reactDom2.default.findDOMNode(this.refs["selectMenu"]); componentHandler.upgradeElement(selectMenu); }; /** * Get the dom value of the component. * @return {object} - The unformated dom value. */ /** * Handle the change on the select, it only propagates the value. * @param {object} evt - The react DOM event. * @return {object} - The function onChange from the props, called. */ /** inheritdoc */ Select.prototype._renderOptions = function _renderOptions(_ref) { var _ref2, _this2 = this; var defaultValue = _ref.defaultValue, labelKey = _ref.labelKey, hasUndefined = _ref.hasUndefined, currentValue = _ref.currentValue, isRequired = _ref.isRequired, rawInputValue = _ref.rawInputValue, _ref$values = _ref.values, values = _ref$values === undefined ? [] : _ref$values, valueKey = _ref.valueKey, isActiveProperty = _ref.isActiveProperty, unSelectedLabel = _ref.unSelectedLabel; values = hasUndefined ? (0, _union2.default)([(_ref2 = {}, _defineProperty(_ref2, labelKey, _i18next2.default.t(unSelectedLabel)), _defineProperty(_ref2, valueKey, UNSELECTED_KEY), _ref2)], this.props.values) : values; return values.filter(function (v) { return (0, _lang.isUndefined)(v[isActiveProperty]) || v[isActiveProperty] === true; }) // Filter on the active value only .map(function (val, idx) { var optVal = '' + val[valueKey]; var elementValue = val[labelKey]; var isSelected = optVal === rawInputValue; var optLabel = (0, _lang.isUndefined)(elementValue) || (0, _lang.isNull)(elementValue) ? _i18next2.default.t(unSelectedLabel) : _i18next2.default.t(elementValue); return _react2.default.createElement( 'li', { key: idx, className: 'mdl-menu__item', 'data-selected': isSelected, 'data-val': optVal, onClick: function onClick() { return _this2._handleSelectChange(val, optVal); } }, optLabel ); }); }; /** * @inheritdoc * @override */ Select.prototype.render = function render() { var _props = this.props, autoFocus = _props.autoFocus, error = _props.error, labelKey = _props.labelKey, name = _props.name, placeholder = _props.placeholder, hasUndefined = _props.hasUndefined, style = _props.style, rawInputValue = _props.rawInputValue, valueKey = _props.valueKey, disabled = _props.disabled, onChange = _props.onChange, index = _props.index, size = _props.size, valid = _props.valid, unSelectedLabel = _props.unSelectedLabel, defaultValue = _props.defaultValue; var selectProps = { autoFocus: autoFocus, disabled: disabled, size: size }; var currentValue = (0, _find2.default)(this.props.values, function (o) { return o[valueKey] === rawInputValue; }) || {}; var currentLabel = rawInputValue ? _i18next2.default.t(currentValue[labelKey]) : _i18next2.default.t(unSelectedLabel); var currentDataVal = rawInputValue ? _i18next2.default.t(currentValue[labelKey]) : _i18next2.default.t(unSelectedLabel); var cssClass = 'mdl-textfield mdl-js-textfield' + (!valid ? ' is-invalid' : ''); return _react2.default.createElement( 'div', { 'data-focus': 'select-mdl', ref: 'select', className: cssClass + ' getmdl-select', 'data-valid': !error, style: style }, _react2.default.createElement('input', _extends({ placeholder: placeholder, className: 'mdl-textfield__input', value: currentLabel, type: 'text', id: index ? '' + name + index : '' + name, name: index ? '' + name + index : '' + name, readOnly: true, tabIndex: index, 'data-val': currentDataVal, ref: 'htmlSelect' }, selectProps)), !disabled && _react2.default.createElement( 'label', { htmlFor: index ? '' + name + index : '' + name }, _react2.default.createElement( 'i', { className: 'mdl-icon-toggle__label material-icons' }, 'keyboard_arrow_down' ) ), !disabled && _react2.default.createElement( 'ul', { className: 'mdl-menu mdl-js-menu', htmlFor: index ? '' + name + index : '' + name, ref: 'selectMenu' }, this._renderOptions(_extends({}, this.props, { currentValue: currentValue })) ), !valid && _react2.default.createElement( 'span', { className: 'mdl-textfield__error', ref: 'error' }, _i18next2.default.t(error) ) ); }; return Select; }(_react.PureComponent); Select.displayName = 'Select'; Select.defaultProps = { disabled: false, error: 'input.select-mdl.error.default', hasUndefined: true, isActiveProperty: 'isActive', isRequired: false, labelKey: 'label', unSelectedLabel: 'select.unSelected', valid: true, values: [], valueKey: 'code', valueParser: _valueParser }; Select.propTypes = { defaultValue: _react.PropTypes.object, disabled: _react.PropTypes.bool, error: _react.PropTypes.string, hasUndefined: _react.PropTypes.bool, isActiveProperty: _react.PropTypes.string, isRequired: _react.PropTypes.bool, labelKey: _react.PropTypes.string, name: _react.PropTypes.string.isRequired, onChange: _react.PropTypes.func.isRequired, placeholder: _react.PropTypes.string, unSelectedLabel: _react.PropTypes.string, rawInputValue: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.number]), valid: _react.PropTypes.bool, valueKey: _react.PropTypes.string, values: _react.PropTypes.array.isRequired }; exports.default = Select; module.exports = exports['default']; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZyLUZSLmpzIl0sIm5hbWVzIjpbIlVOU0VMRUNURURfS0VZIiwiX3ZhbHVlUGFyc2VyIiwicHJvcHNWYWx1ZSIsInJhd1ZhbHVlIiwicmV0dXJuVmFsdWUiLCJ0eXBlIiwicHJvcHMiLCJTZWxlY3QiLCJnZXRWYWx1ZSIsInJhd0lucHV0VmFsdWUiLCJfaGFuZGxlU2VsZWN0Q2hhbmdlIiwidmFsIiwidmFsdWUiLCJvbkNoYW5nZSIsInZhbHVlUGFyc2VyIiwiZmluZERPTU5vZGUiLCJyZWZzIiwicGFyZW50Tm9kZSIsImNsYXNzTGlzdCIsInJlbW92ZSIsImNhbGwiLCJjb21wb25lbnREaWRNb3VudCIsInNlbGVjdE1lbnUiLCJjb21wb25lbnRIYW5kbGVyIiwidXBncmFkZUVsZW1lbnQiLCJfcmVuZGVyT3B0aW9ucyIsImRlZmF1bHRWYWx1ZSIsImxhYmVsS2V5IiwiaGFzVW5kZWZpbmVkIiwiY3VycmVudFZhbHVlIiwiaXNSZXF1aXJlZCIsInZhbHVlcyIsInZhbHVlS2V5IiwiaXNBY3RpdmVQcm9wZXJ0eSIsInVuU2VsZWN0ZWRMYWJlbCIsInQiLCJmaWx0ZXIiLCJ2IiwibWFwIiwiaWR4Iiwib3B0VmFsIiwiZWxlbWVudFZhbHVlIiwiaXNTZWxlY3RlZCIsIm9wdExhYmVsIiwicmVuZGVyIiwiYXV0b0ZvY3VzIiwiZXJyb3IiLCJuYW1lIiwicGxhY2Vob2xkZXIiLCJzdHlsZSIsImRpc2FibGVkIiwiaW5kZXgiLCJzaXplIiwidmFsaWQiLCJzZWxlY3RQcm9wcyIsIm8iLCJjdXJyZW50TGFiZWwiLCJjdXJyZW50RGF0YVZhbCIsImNzc0NsYXNzIiwiZGlzcGxheU5hbWUiLCJkZWZhdWx0UHJvcHMiLCJwcm9wVHlwZXMiLCJvYmplY3QiLCJib29sIiwic3RyaW5nIiwiZnVuYyIsIm9uZU9mVHlwZSIsIm51bWJlciIsImFycmF5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7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QUFVLGlCQUFVcUMsTUFQTDtBQVFmakIsVUFBTSxpQkFBVWlCLE1BQVYsQ0FBaUJsQyxVQVJSO0FBU2ZqQixjQUFVLGlCQUFVb0QsSUFBVixDQUFlbkMsVUFUVjtBQVVma0IsaUJBQWEsaUJBQVVnQixNQVZSO0FBV2Y5QixxQkFBaUIsaUJBQVU4QixNQVhaO0FBWWZ2RCxtQkFBZSxpQkFBVXlELFNBQVYsQ0FBb0IsQ0FDL0IsaUJBQVVGLE1BRHFCLEVBRS9CLGlCQUFVRyxNQUZxQixDQUFwQixDQVpBO0FBZ0JmZCxXQUFPLGlCQUFVVSxJQWhCRjtBQWlCZi9CLGNBQVUsaUJBQVVnQyxNQWpCTDtBQWtCZmpDLFlBQVEsaUJBQVVxQyxLQUFWLENBQWdCdEM7QUFsQlQsQ0FBbkI7O2tCQXFCZXZCLE0iLCJmaWxlIjoiZnItRlIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvL2RlcGVuZGVuY2llc1xyXG5pbXBvcnQgUmVhY3QsIHtQcm9wVHlwZXMsIFB1cmVDb21wb25lbnR9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XHJcbmltcG9ydCBpMThuZXh0IGZyb20gJ2kxOG5leHQnO1xyXG5pbXBvcnQgZmluZCBmcm9tICdsb2Rhc2gvZmluZCc7XHJcbmltcG9ydCB7aXNVbmRlZmluZWQsIGlzTnVsbCwgaXNOdW1iZXJ9IGZyb20gJ2xvZGFzaC9sYW5nJztcclxuaW1wb3J0IHVuaW9uIGZyb20gJ2xvZGFzaC91bmlvbic7XHJcblxyXG5jb25zdCBVTlNFTEVDVEVEX0tFWSA9ICdVTlNFTEVDVEVEX0tFWSc7XHJcblxyXG4vKipcclxuKiBQYXJzZSB0aGUgdmFsdWUuXHJcbiogQHBhcmFtICB7c3RyaW5nIHwgbnVtYmVyfSBwcm9wc1ZhbHVlIC0gVGhlIHZhbHVlIGdpdmVuIGFzIHByb3BzIHRvIHJlYWQgdGhlIHR5cGUuXHJcbiogQHBhcmFtICB7c3RyaW5nfSByYXdWYWx1ZSAgIC0gVGhlIHJhdyBzdHJpbmcgdmFsdWUuXHJcbiogQHJldHVybiB7c3RyaW50IHwgbnVtYmVyfSAgLSBUaGUgcGFyc2VkIHZhbHVlLlxyXG4qL1xyXG5mdW5jdGlvbiBfdmFsdWVQYXJzZXIocHJvcHNWYWx1ZSwgcmF3VmFsdWUpIHtcclxuICAgIGNvbnN0IHJldHVyblZhbHVlID0gcmF3VmFsdWUgPyByYXdWYWx1ZSA6IHByb3BzVmFsdWVcclxuICAgIGlmKFVOU0VMRUNURURfS0VZID09PSByYXdWYWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3Qge3R5cGV9ID0gdGhpcy5wcm9wcztcclxuICAgIHJldHVybiB0eXBlID09PSAnbnVtYmVyJyA/ICtyZXR1cm5WYWx1ZSA6IHJldHVyblZhbHVlO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiogQ29tcG9uZW50IHN0YW5kaW5nIGZvciBhbiBIVE1MIGlucHV0LlxyXG4qIGh0dHBzOi8vZ2l0aHViLmNvbS9DcmVhdGl2ZUlUL2dldG1kbC1zZWxlY3QvXHJcbiovXHJcbmNsYXNzIFNlbGVjdCBleHRlbmRzIFB1cmVDb21wb25lbnQge1xyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0TWVudSA9IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMucmVmc1tcInNlbGVjdE1lbnVcIl0pO1xyXG4gICAgICAgIGNvbXBvbmVudEhhbmRsZXIudXBncmFkZUVsZW1lbnQoc2VsZWN0TWVudSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldCB0aGUgZG9tIHZhbHVlIG9mIHRoZSBjb21wb25lbnQuXHJcbiAgICAqIEByZXR1cm4ge29iamVjdH0gLSBUaGUgdW5mb3JtYXRlZCBkb20gdmFsdWUuXHJcbiAgICAqL1xyXG4gICAgZ2V0VmFsdWUgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qge3R5cGUsIHJhd0lucHV0VmFsdWV9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBpZiAoaXNOdWxsKHJhd0lucHV0VmFsdWUpIHx8IGlzVW5kZWZpbmVkKHJhd0lucHV0VmFsdWUpIHx8IFVOU0VMRUNURURfS0VZID09PSByYXdJbnB1dFZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ251bWJlcicgPyArcmF3SW5wdXRWYWx1ZSA6IHJhd0lucHV0VmFsdWU7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBIYW5kbGUgdGhlIGNoYW5nZSBvbiB0aGUgc2VsZWN0LCBpdCBvbmx5IHByb3BhZ2F0ZXMgdGhlIHZhbHVlLlxyXG4gICAgKiBAcGFyYW0gIHtvYmplY3R9IGV2dCAtIFRoZSByZWFjdCBET00gZXZlbnQuXHJcbiAgICAqIEByZXR1cm4ge29iamVjdH0gLSBUaGUgZnVuY3Rpb24gb25DaGFuZ2UgZnJvbSB0aGUgcHJvcHMsIGNhbGxlZC5cclxuICAgICovXHJcbiAgICBfaGFuZGxlU2VsZWN0Q2hhbmdlID0gKHZhbCwgdmFsdWUpID0+IHtcclxuICAgICAgICBjb25zdCB7b25DaGFuZ2UsIHZhbHVlUGFyc2VyLCByYXdJbnB1dFZhbHVlfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgUmVhY3RET00uZmluZERPTU5vZGUodGhpcy5yZWZzW1wic2VsZWN0TWVudVwiXSkucGFyZW50Tm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdpcy12aXNpYmxlJyk7XHJcbiAgICAgICAgcmV0dXJuIG9uQ2hhbmdlKHZhbHVlUGFyc2VyLmNhbGwodGhpcywgcmF3SW5wdXRWYWx1ZSwgdmFsdWUpKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqIGluaGVyaXRkb2MgKi9cclxuICAgIF9yZW5kZXJPcHRpb25zKHtkZWZhdWx0VmFsdWUsIGxhYmVsS2V5LCBoYXNVbmRlZmluZWQsIGN1cnJlbnRWYWx1ZSwgaXNSZXF1aXJlZCwgcmF3SW5wdXRWYWx1ZSwgdmFsdWVzID0gW10sIHZhbHVlS2V5LCBpc0FjdGl2ZVByb3BlcnR5LCB1blNlbGVjdGVkTGFiZWx9KSB7XHJcbiAgICAgICAgdmFsdWVzID0gaGFzVW5kZWZpbmVkICA/IHVuaW9uKFt7W2xhYmVsS2V5XTogaTE4bmV4dC50KHVuU2VsZWN0ZWRMYWJlbCksIFt2YWx1ZUtleV06IFVOU0VMRUNURURfS0VZfV0sIHRoaXMucHJvcHMudmFsdWVzKSA6IHZhbHVlcztcclxuICAgICAgICByZXR1cm4gdmFsdWVzLmZpbHRlcih2ID0+IGlzVW5kZWZpbmVkKHZbaXNBY3RpdmVQcm9wZXJ0eV0pIHx8IHZbaXNBY3RpdmVQcm9wZXJ0eV0gPT09IHRydWUpIC8vIEZpbHRlciBvbiB0aGUgYWN0aXZlIHZhbHVlIG9ubHlcclxuICAgICAgICAubWFwKCh2YWwsIGlkeCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRWYWwgPSBgJHt2YWxbdmFsdWVLZXldfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9IHZhbFtsYWJlbEtleV07XHJcbiAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBvcHRWYWwgPT09IHJhd0lucHV0VmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdExhYmVsID0gaXNVbmRlZmluZWQoZWxlbWVudFZhbHVlKSB8fCBpc051bGwoZWxlbWVudFZhbHVlKSA/IGkxOG5leHQudCh1blNlbGVjdGVkTGFiZWwpIDogaTE4bmV4dC50KGVsZW1lbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICA8bGkga2V5PXtpZHh9IGNsYXNzTmFtZT0nbWRsLW1lbnVfX2l0ZW0nIGRhdGEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWR9IGRhdGEtdmFsPXtvcHRWYWx9IG9uQ2xpY2s9eygpID0+IHRoaXMuX2hhbmRsZVNlbGVjdENoYW5nZSh2YWwsIG9wdFZhbCl9PntvcHRMYWJlbH08L2xpPlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBAaW5oZXJpdGRvY1xyXG4gICAgKiBAb3ZlcnJpZGVcclxuICAgICovXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3QgeyBhdXRvRm9jdXMsIGVycm9yLCBsYWJlbEtleSwgbmFtZSwgcGxhY2Vob2xkZXIsIGhhc1VuZGVmaW5lZCwgc3R5bGUsIHJhd0lucHV0VmFsdWUsIHZhbHVlS2V5LCBkaXNhYmxlZCwgb25DaGFuZ2UsaW5kZXgsIHNpemUsIHZhbGlkLCB1blNlbGVjdGVkTGFiZWwsIGRlZmF1bHRWYWx1ZSB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBjb25zdCBzZWxlY3RQcm9wcyA9IHsgYXV0b0ZvY3VzLCBkaXNhYmxlZCwgc2l6ZSB9O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGZpbmQodGhpcy5wcm9wcy52YWx1ZXMsIChvKSA9PiBvW3ZhbHVlS2V5XSA9PT0gcmF3SW5wdXRWYWx1ZSkgfHwge307XHJcbiAgICAgICAgY29uc3QgY3VycmVudExhYmVsID0gcmF3SW5wdXRWYWx1ZSA/IGkxOG5leHQudChjdXJyZW50VmFsdWVbbGFiZWxLZXldKSA6IGkxOG5leHQudCh1blNlbGVjdGVkTGFiZWwpXHJcbiAgICAgICAgY29uc3QgY3VycmVudERhdGFWYWwgPSByYXdJbnB1dFZhbHVlID8gaTE4bmV4dC50KGN1cnJlbnRWYWx1ZVtsYWJlbEtleV0pIDogaTE4bmV4dC50KHVuU2VsZWN0ZWRMYWJlbClcclxuICAgICAgICBjb25zdCBjc3NDbGFzcyA9IGBtZGwtdGV4dGZpZWxkIG1kbC1qcy10ZXh0ZmllbGQkeyF2YWxpZCA/ICcgaXMtaW52YWxpZCcgOiAnJ31gO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgZGF0YS1mb2N1cz0nc2VsZWN0LW1kbCcgcmVmPSdzZWxlY3QnIGNsYXNzTmFtZT17YCR7Y3NzQ2xhc3N9IGdldG1kbC1zZWxlY3RgfSBkYXRhLXZhbGlkPXshZXJyb3J9IHN0eWxlPXtzdHlsZX0+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfSBjbGFzc05hbWU9J21kbC10ZXh0ZmllbGRfX2lucHV0JyB2YWx1ZT17Y3VycmVudExhYmVsfSB0eXBlPSd0ZXh0JyBpZD17aW5kZXggPyBgJHtuYW1lfSR7aW5kZXh9YDpgJHtuYW1lfWB9IG5hbWU9e2luZGV4ID8gYCR7bmFtZX0ke2luZGV4fWA6YCR7bmFtZX1gfSByZWFkT25seSB0YWJJbmRleD17aW5kZXh9IGRhdGEtdmFsPXtjdXJyZW50RGF0YVZhbH0gcmVmPSdodG1sU2VsZWN0JyB7Li4uc2VsZWN0UHJvcHN9IC8+XHJcbiAgICAgICAgICAgICAgICB7IWRpc2FibGVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9e2luZGV4ID8gYCR7bmFtZX0ke2luZGV4fWA6YCR7bmFtZX1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPSdtZGwtaWNvbi10b2dnbGVfX2xhYmVsIG1hdGVyaWFsLWljb25zJz5rZXlib2FyZF9hcnJvd19kb3duPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB7IWRpc2FibGVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT0nbWRsLW1lbnUgbWRsLWpzLW1lbnUnIGh0bWxGb3I9e2luZGV4ID8gYCR7bmFtZX0ke2luZGV4fWA6YCR7bmFtZX1gfSByZWY9J3NlbGVjdE1lbnUnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5fcmVuZGVyT3B0aW9ucyh7Li4udGhpcy5wcm9wcywgY3VycmVudFZhbHVlfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHshdmFsaWQgJiYgPHNwYW4gY2xhc3NOYW1lPSdtZGwtdGV4dGZpZWxkX19lcnJvcicgcmVmPSdlcnJvcic+e2kxOG5leHQudChlcnJvcil9PC9zcGFuPn1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuU2VsZWN0LmRpc3BsYXlOYW1lID0gJ1NlbGVjdCc7XHJcblNlbGVjdC5kZWZhdWx0UHJvcHMgPSB7XHJcbiAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICBlcnJvcjogJ2lucHV0LnNlbGVjdC1tZGwuZXJyb3IuZGVmYXVsdCcsXHJcbiAgICBoYXNVbmRlZmluZWQ6IHRydWUsXHJcbiAgICBpc0FjdGl2ZVByb3BlcnR5OiAnaXNBY3RpdmUnLFxyXG4gICAgaXNSZXF1aXJlZDogZmFsc2UsXHJcbiAgICBsYWJlbEtleTogJ2xhYmVsJyxcclxuICAgIHVuU2VsZWN0ZWRMYWJlbDogJ3NlbGVjdC51blNlbGVjdGVkJyxcclxuICAgIHZhbGlkOiB0cnVlLFxyXG4gICAgdmFsdWVzOiBbXSxcclxuICAgIHZhbHVlS2V5OiAnY29kZScsXHJcbiAgICB2YWx1ZVBhcnNlcjogX3ZhbHVlUGFyc2VyXHJcbn07XHJcblNlbGVjdC5wcm9wVHlwZXMgPSB7XHJcbiAgICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vYmplY3QsXHJcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXHJcbiAgICBlcnJvcjogUHJvcFR5cGVzLnN0cmluZyxcclxuICAgIGhhc1VuZGVmaW5lZDogUHJvcFR5cGVzLmJvb2wsXHJcbiAgICBpc0FjdGl2ZVByb3BlcnR5OiBQcm9wVHlwZXMuc3RyaW5nLFxyXG4gICAgaXNSZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXHJcbiAgICBsYWJlbEtleTogUHJvcFR5cGVzLnN0cmluZyxcclxuICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcclxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxyXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgICB1blNlbGVjdGVkTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgICByYXdJbnB1dFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcclxuICAgICAgICBQcm9wVHlwZXMuc3RyaW5nLFxyXG4gICAgICAgIFByb3BUeXBlcy5udW1iZXJcclxuICAgIF0pLFxyXG4gICAgdmFsaWQ6IFByb3BUeXBlcy5ib29sLFxyXG4gICAgdmFsdWVLZXk6IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgICB2YWx1ZXM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7XHJcbiJdfQ==