focus-components-v3
Version:
Focus web components to build applications (based on Material Design)
246 lines (200 loc) • 26.6 kB
JavaScript
'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==