apeman-react-toast
Version:
apeman react package for toast components.
190 lines (165 loc) • 15.2 kB
JavaScript
/**
* Toast component
* @constructor ApToast
*/
;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _apemanReactMixins = require('apeman-react-mixins');
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _arrayfilter = require('arrayfilter');
var _arrayfilter2 = _interopRequireDefault(_arrayfilter);
var _ap_toast_item = require('./ap_toast_item');
var _ap_toast_item2 = _interopRequireDefault(_ap_toast_item);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/** @lends ApToast */
var ApToast = _react2.default.createClass({
displayName: 'ApToast',
//--------------------
// Specs
//--------------------
propTypes: {
message: _react.PropTypes.string,
duration: _react.PropTypes.number,
icon: _react.PropTypes.string
},
mixins: [_apemanReactMixins.ApPureMixin],
statics: {
itemJoiner: '____'
},
getInitialState: function getInitialState() {
return {
items: ''
};
},
getDefaultProps: function getDefaultProps() {
return {
message: null,
duration: 2000,
icon: null
};
},
render: function render() {
var s = this;
var state = s.state;
var props = s.props;
var valid = state.items.length;
if (!valid) {
return null;
}
return _react2.default.createElement(
'div',
{ className: (0, _classnames2.default)('ap-toast', props.className, {}),
style: Object.assign({}, props.style) },
_react2.default.createElement(
'div',
{ className: 'ap-toast-inner' },
s._renderToastItem()
)
);
},
//--------------------
// Lifecycle
//--------------------
componentWillMount: function componentWillMount() {
var s = this;
},
componentDidMount: function componentDidMount() {
var s = this,
props = s.props;
s.startTicking();
s.pushToastItem(props.message);
},
componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
var s = this;
s.pushToastItem(nextProps.message);
},
componentWillUnmount: function componentWillUnmount() {
var s = this;
s.stopTicking();
},
//------------------
// Custom
//------------------
startTicking: function startTicking() {
var s = this;
clearTimeout(s._tickTimer);
s._ticking = true;
s.doTick();
},
stopTicking: function stopTicking() {
var s = this;
clearTimeout(s._tickTimer);
s._ticking = false;
},
doTick: function doTick() {
var s = this,
props = s.props;
if (!s._ticking) {
return;
}
s._tickTimer = setTimeout(function () {
s.shiftToastItem();
s.doTick();
}, props.duration);
},
pushToastItem: function pushToastItem(message) {
var s = this;
if (!message) {
return;
}
var items = (s.state.items || '').split(ApToast.itemJoiner);
var duplicate = items[items.length - 1] === message;
if (duplicate) {
return;
}
s.setState({
items: items.concat(message).join(ApToast.itemJoiner)
});
},
shiftToastItem: function shiftToastItem() {
var s = this;
var items = (s.state.items || '').split(ApToast.itemJoiner);
if (!items.length) {
s.setState({ items: null });
return;
}
s.setState({
items: items.slice(1).join(ApToast.itemJoiner)
});
},
dismissToastItem: function dismissToastItem(message) {
var s = this;
var items = (s.state.items || '').split(ApToast.itemJoiner);
s.setState({
items: items.filter(function (filtering) {
return filtering !== message;
}).join(ApToast.itemJoiner)
});
},
handleToastItemTap: function handleToastItemTap(e) {
var s = this;
var text = e.target.dataset['text'];
s.dismissToastItem(text);
},
//------------------
// Private
//------------------
_ticking: false,
_tickTimer: null,
_renderToastItem: function _renderToastItem() {
var s = this;
var state = s.state;
var props = s.props;
return (state.items || '').split(ApToast.itemJoiner).filter(_arrayfilter2.default.emptyReject()).map(function (text, i) {
return _react2.default.createElement(_ap_toast_item2.default, { key: 'toast-' + text + '-' + i,
text: text,
icon: props.icon,
onTap: s.handleToastItemTap
});
});
}
});
module.exports = ApToast;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwX3RvYXN0LmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUtBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLElBQUksVUFBVSxnQkFBTSxXQUFOLENBQWtCOzs7Ozs7O0FBTzVCLGVBQVc7QUFDUCxpQkFBUyxpQkFBTSxNQUFOO0FBQ1Qsa0JBQVUsaUJBQU0sTUFBTjtBQUNWLGNBQU0saUJBQU0sTUFBTjtLQUhWOztBQU1BLFlBQVEsZ0NBQVI7O0FBSUEsYUFBUztBQUNMLG9CQUFZLE1BQVo7S0FESjs7QUFJQSxnREFBa0I7QUFDZCxlQUFPO0FBQ0gsbUJBQU8sRUFBUDtTQURKLENBRGM7S0FyQlU7QUEyQjVCLGdEQUFrQjtBQUNkLGVBQU87QUFDSCxxQkFBUyxJQUFUO0FBQ0Esc0JBQVUsSUFBVjtBQUNBLGtCQUFNLElBQU47U0FISixDQURjO0tBM0JVO0FBbUM1Qiw4QkFBUztBQUNELGdCQUFJLElBQUosQ0FEQztZQUVBLFFBQWdCLEVBQWhCLE1BRkE7WUFFTyxRQUFTLEVBQVQsTUFGUDs7QUFJTCxZQUFJLFFBQVEsTUFBTSxLQUFOLENBQVksTUFBWixDQUpQO0FBS0wsWUFBSSxDQUFDLEtBQUQsRUFBUTtBQUNSLG1CQUFPLElBQVAsQ0FEUTtTQUFaO0FBR0EsZUFDSTs7Y0FBSyxXQUFXLDBCQUFXLFVBQVgsRUFBdUIsTUFBTSxTQUFOLEVBQWlCLEVBQXhDLENBQVg7QUFHQSx1QkFBTyxPQUFPLE1BQVAsQ0FBYyxFQUFkLEVBQWtCLE1BQU0sS0FBTixDQUF6QixFQUhMO1lBSUk7O2tCQUFLLFdBQVUsZ0JBQVYsRUFBTDtnQkFDSyxFQUFFLGdCQUFGLEVBREw7YUFKSjtTQURKLENBUks7S0FuQ21COzs7Ozs7QUE0RDVCLHNEQUFxQjtBQUNqQixZQUFJLElBQUksSUFBSixDQURhO0tBNURPO0FBZ0U1QixvREFBb0I7QUFDaEIsWUFBSSxJQUFJLElBQUo7WUFDQSxRQUFRLEVBQUUsS0FBRixDQUZJO0FBR2hCLFVBQUUsWUFBRixHQUhnQjtBQUloQixVQUFFLGFBQUYsQ0FBZ0IsTUFBTSxPQUFOLENBQWhCLENBSmdCO0tBaEVRO0FBdUU1QixrRUFBMEIsV0FBVztBQUNqQyxZQUFJLElBQUksSUFBSixDQUQ2QjtBQUVqQyxVQUFFLGFBQUYsQ0FBZ0IsVUFBVSxPQUFWLENBQWhCLENBRmlDO0tBdkVUO0FBNEU1QiwwREFBdUI7QUFDbkIsWUFBSSxJQUFJLElBQUosQ0FEZTtBQUVuQixVQUFFLFdBQUYsR0FGbUI7S0E1RUs7Ozs7OztBQXFGNUIsMENBQWU7QUFDWCxZQUFJLElBQUksSUFBSixDQURPO0FBRVgscUJBQWEsRUFBRSxVQUFGLENBQWIsQ0FGVztBQUdYLFVBQUUsUUFBRixHQUFhLElBQWIsQ0FIVztBQUlYLFVBQUUsTUFBRixHQUpXO0tBckZhO0FBNEY1Qix3Q0FBYztBQUNWLFlBQUksSUFBSSxJQUFKLENBRE07QUFFVixxQkFBYSxFQUFFLFVBQUYsQ0FBYixDQUZVO0FBR1YsVUFBRSxRQUFGLEdBQWEsS0FBYixDQUhVO0tBNUZjO0FBa0c1Qiw4QkFBUztBQUNMLFlBQUksSUFBSSxJQUFKO1lBQ0EsUUFBUSxFQUFFLEtBQUYsQ0FGUDtBQUdMLFlBQUksQ0FBQyxFQUFFLFFBQUYsRUFBWTtBQUNiLG1CQURhO1NBQWpCO0FBR0EsVUFBRSxVQUFGLEdBQWUsV0FBVyxZQUFLO0FBQzNCLGNBQUUsY0FBRixHQUQyQjtBQUUzQixjQUFFLE1BQUYsR0FGMkI7U0FBTCxFQUd2QixNQUFNLFFBQU4sQ0FISCxDQU5LO0tBbEdtQjtBQThHNUIsMENBQWMsU0FBUztBQUNuQixZQUFJLElBQUksSUFBSixDQURlO0FBRW5CLFlBQUksQ0FBQyxPQUFELEVBQVU7QUFDVixtQkFEVTtTQUFkO0FBR0EsWUFBSSxRQUFRLENBQUMsRUFBRSxLQUFGLENBQVEsS0FBUixJQUFpQixFQUFqQixDQUFELENBQXNCLEtBQXRCLENBQTRCLFFBQVEsVUFBUixDQUFwQyxDQUxlO0FBTW5CLFlBQUksWUFBWSxNQUFNLE1BQU0sTUFBTixHQUFlLENBQWYsQ0FBTixLQUE0QixPQUE1QixDQU5HO0FBT25CLFlBQUksU0FBSixFQUFlO0FBQ1gsbUJBRFc7U0FBZjtBQUdBLFVBQUUsUUFBRixDQUFXO0FBQ1AsbUJBQU8sTUFBTSxNQUFOLENBQWEsT0FBYixFQUFzQixJQUF0QixDQUEyQixRQUFRLFVBQVIsQ0FBbEM7U0FESixFQVZtQjtLQTlHSztBQTZINUIsOENBQWlCO0FBQ2IsWUFBSSxJQUFJLElBQUosQ0FEUztBQUViLFlBQUksUUFBUSxDQUFDLEVBQUUsS0FBRixDQUFRLEtBQVIsSUFBaUIsRUFBakIsQ0FBRCxDQUFzQixLQUF0QixDQUE0QixRQUFRLFVBQVIsQ0FBcEMsQ0FGUztBQUdiLFlBQUksQ0FBQyxNQUFNLE1BQU4sRUFBYztBQUNmLGNBQUUsUUFBRixDQUFXLEVBQUMsT0FBTyxJQUFQLEVBQVosRUFEZTtBQUVmLG1CQUZlO1NBQW5CO0FBSUEsVUFBRSxRQUFGLENBQVc7QUFDUCxtQkFBTyxNQUFNLEtBQU4sQ0FBWSxDQUFaLEVBQWUsSUFBZixDQUFvQixRQUFRLFVBQVIsQ0FBM0I7U0FESixFQVBhO0tBN0hXO0FBeUk1QixnREFBaUIsU0FBUztBQUN0QixZQUFJLElBQUksSUFBSixDQURrQjtBQUV0QixZQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUYsQ0FBUSxLQUFSLElBQWlCLEVBQWpCLENBQUQsQ0FBc0IsS0FBdEIsQ0FBNEIsUUFBUSxVQUFSLENBQXBDLENBRmtCO0FBR3RCLFVBQUUsUUFBRixDQUFXO0FBQ1AsbUJBQU8sTUFBTSxNQUFOLENBQWEsVUFBQyxTQUFEO3VCQUFjLGNBQWMsT0FBZDthQUFkLENBQWIsQ0FDRixJQURFLENBQ0csUUFBUSxVQUFSLENBRFY7U0FESixFQUhzQjtLQXpJRTtBQWtKNUIsb0RBQW1CLEdBQUU7QUFDakIsWUFBSSxJQUFJLElBQUosQ0FEYTtBQUVqQixZQUFJLE9BQU8sRUFBRSxNQUFGLENBQVMsT0FBVCxDQUFpQixNQUFqQixDQUFQLENBRmE7QUFHakIsVUFBRSxnQkFBRixDQUFtQixJQUFuQixFQUhpQjtLQWxKTzs7Ozs7QUEySjVCLGNBQVUsS0FBVjtBQUNBLGdCQUFZLElBQVo7QUFDQSxrREFBbUI7QUFDWCxnQkFBSSxJQUFKLENBRFc7WUFFVixRQUFnQixFQUFoQixNQUZVO1lBRUgsUUFBUyxFQUFULE1BRkc7O0FBR2YsZUFBTyxDQUFDLE1BQU0sS0FBTixJQUFlLEVBQWYsQ0FBRCxDQUFvQixLQUFwQixDQUEwQixRQUFRLFVBQVIsQ0FBMUIsQ0FDRixNQURFLENBQ0ssc0JBQVksV0FBWixFQURMLEVBRUYsR0FGRSxDQUVFLFVBQUMsSUFBRCxFQUFPLENBQVA7bUJBQ0cseURBQWEsZ0JBQWMsYUFBUSxDQUF0QjtBQUNBLHNCQUFNLElBQU47QUFDQSxzQkFBTSxNQUFNLElBQU47QUFDTix1QkFBTyxFQUFFLGtCQUFGO2FBSHBCO1NBREgsQ0FGVCxDQUhlO0tBN0pTO0NBQWxCLENBQVY7O0FBOEtKLE9BQU8sT0FBUCxHQUFpQixPQUFqQiIsImZpbGUiOiJhcF90b2FzdC5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvb2t1bmlzaGluaXNoaS9Qcm9qZWN0cy9hcGVtYW4tcHJvamVjdHMvYXBlbWFuLXJlYWN0LXRvYXN0L2xpYiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVG9hc3QgY29tcG9uZW50XG4gKiBAY29uc3RydWN0b3IgQXBUb2FzdFxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUmVhY3QsIHtQcm9wVHlwZXMgYXMgdHlwZXN9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QXBQdXJlTWl4aW59IGZyb20gJ2FwZW1hbi1yZWFjdC1taXhpbnMnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgYXJyYXlmaWx0ZXIgZnJvbSAnYXJyYXlmaWx0ZXInO1xuaW1wb3J0IEFwVG9hc3RJdGVtIGZyb20gJy4vYXBfdG9hc3RfaXRlbSc7XG5cbi8qKiBAbGVuZHMgQXBUb2FzdCAqL1xubGV0IEFwVG9hc3QgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG5cblxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTcGVjc1xuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHByb3BUeXBlczoge1xuICAgICAgICBtZXNzYWdlOiB0eXBlcy5zdHJpbmcsXG4gICAgICAgIGR1cmF0aW9uOiB0eXBlcy5udW1iZXIsXG4gICAgICAgIGljb246IHR5cGVzLnN0cmluZ1xuICAgIH0sXG5cbiAgICBtaXhpbnM6IFtcbiAgICAgICAgQXBQdXJlTWl4aW5cbiAgICBdLFxuXG4gICAgc3RhdGljczoge1xuICAgICAgICBpdGVtSm9pbmVyOiAnX19fXydcbiAgICB9LFxuXG4gICAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6ICcnXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGdldERlZmF1bHRQcm9wcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwMCxcbiAgICAgICAgICAgIGljb246IG51bGxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgcyA9IHRoaXMsXG4gICAgICAgICAgICB7c3RhdGUsIHByb3BzfSA9IHM7XG5cbiAgICAgICAgbGV0IHZhbGlkID0gc3RhdGUuaXRlbXMubGVuZ3RoO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2FwLXRvYXN0JywgcHJvcHMuY2xhc3NOYW1lLCB7XG5cbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICBzdHlsZT17T2JqZWN0LmFzc2lnbih7fSwgcHJvcHMuc3R5bGUpfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFwLXRvYXN0LWlubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIHtzLl9yZW5kZXJUb2FzdEl0ZW0oKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH0sXG5cblxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBMaWZlY3ljbGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBjb21wb25lbnRXaWxsTW91bnQoKSB7XG4gICAgICAgIGxldCBzID0gdGhpcztcbiAgICB9LFxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIGxldCBzID0gdGhpcyxcbiAgICAgICAgICAgIHByb3BzID0gcy5wcm9wcztcbiAgICAgICAgcy5zdGFydFRpY2tpbmcoKTtcbiAgICAgICAgcy5wdXNoVG9hc3RJdGVtKHByb3BzLm1lc3NhZ2UpO1xuICAgIH0sXG5cbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgICAgICBsZXQgcyA9IHRoaXM7XG4gICAgICAgIHMucHVzaFRvYXN0SXRlbShuZXh0UHJvcHMubWVzc2FnZSk7XG4gICAgfSxcblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICBsZXQgcyA9IHRoaXM7XG4gICAgICAgIHMuc3RvcFRpY2tpbmcoKTtcbiAgICB9LFxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBDdXN0b21cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgc3RhcnRUaWNraW5nKCkge1xuICAgICAgICBsZXQgcyA9IHRoaXM7XG4gICAgICAgIGNsZWFyVGltZW91dChzLl90aWNrVGltZXIpO1xuICAgICAgICBzLl90aWNraW5nID0gdHJ1ZTtcbiAgICAgICAgcy5kb1RpY2soKTtcbiAgICB9LFxuXG4gICAgc3RvcFRpY2tpbmcoKSB7XG4gICAgICAgIGxldCBzID0gdGhpcztcbiAgICAgICAgY2xlYXJUaW1lb3V0KHMuX3RpY2tUaW1lcik7XG4gICAgICAgIHMuX3RpY2tpbmcgPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgZG9UaWNrKCkge1xuICAgICAgICBsZXQgcyA9IHRoaXMsXG4gICAgICAgICAgICBwcm9wcyA9IHMucHJvcHM7XG4gICAgICAgIGlmICghcy5fdGlja2luZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHMuX3RpY2tUaW1lciA9IHNldFRpbWVvdXQoKCk9PiB7XG4gICAgICAgICAgICBzLnNoaWZ0VG9hc3RJdGVtKCk7XG4gICAgICAgICAgICBzLmRvVGljaygpO1xuICAgICAgICB9LCBwcm9wcy5kdXJhdGlvbik7XG4gICAgfSxcblxuICAgIHB1c2hUb2FzdEl0ZW0obWVzc2FnZSkge1xuICAgICAgICBsZXQgcyA9IHRoaXM7XG4gICAgICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpdGVtcyA9IChzLnN0YXRlLml0ZW1zIHx8ICcnKS5zcGxpdChBcFRvYXN0Lml0ZW1Kb2luZXIpO1xuICAgICAgICBsZXQgZHVwbGljYXRlID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0gPT09IG1lc3NhZ2U7XG4gICAgICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGl0ZW1zOiBpdGVtcy5jb25jYXQobWVzc2FnZSkuam9pbihBcFRvYXN0Lml0ZW1Kb2luZXIpXG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBzaGlmdFRvYXN0SXRlbSgpIHtcbiAgICAgICAgbGV0IHMgPSB0aGlzO1xuICAgICAgICBsZXQgaXRlbXMgPSAocy5zdGF0ZS5pdGVtcyB8fCAnJykuc3BsaXQoQXBUb2FzdC5pdGVtSm9pbmVyKTtcbiAgICAgICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHMuc2V0U3RhdGUoe2l0ZW1zOiBudWxsfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpdGVtczogaXRlbXMuc2xpY2UoMSkuam9pbihBcFRvYXN0Lml0ZW1Kb2luZXIpXG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBkaXNtaXNzVG9hc3RJdGVtKG1lc3NhZ2UpIHtcbiAgICAgICAgbGV0IHMgPSB0aGlzO1xuICAgICAgICBsZXQgaXRlbXMgPSAocy5zdGF0ZS5pdGVtcyB8fCAnJykuc3BsaXQoQXBUb2FzdC5pdGVtSm9pbmVyKTtcbiAgICAgICAgcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpdGVtczogaXRlbXMuZmlsdGVyKChmaWx0ZXJpbmcpPT4gZmlsdGVyaW5nICE9PSBtZXNzYWdlKVxuICAgICAgICAgICAgICAgIC5qb2luKEFwVG9hc3QuaXRlbUpvaW5lcilcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGhhbmRsZVRvYXN0SXRlbVRhcChlKXtcbiAgICAgICAgbGV0IHMgPSB0aGlzO1xuICAgICAgICBsZXQgdGV4dCA9IGUudGFyZ2V0LmRhdGFzZXRbJ3RleHQnXTtcbiAgICAgICAgcy5kaXNtaXNzVG9hc3RJdGVtKHRleHQpO1xuICAgIH0sXG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFByaXZhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF90aWNraW5nOiBmYWxzZSxcbiAgICBfdGlja1RpbWVyOiBudWxsLFxuICAgIF9yZW5kZXJUb2FzdEl0ZW0oKSB7XG4gICAgICAgIGxldCBzID0gdGhpcyxcbiAgICAgICAgICAgIHtzdGF0ZSwgcHJvcHN9ID0gcztcbiAgICAgICAgcmV0dXJuIChzdGF0ZS5pdGVtcyB8fCAnJykuc3BsaXQoQXBUb2FzdC5pdGVtSm9pbmVyKVxuICAgICAgICAgICAgLmZpbHRlcihhcnJheWZpbHRlci5lbXB0eVJlamVjdCgpKVxuICAgICAgICAgICAgLm1hcCgodGV4dCwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8QXBUb2FzdEl0ZW0ga2V5PXtgdG9hc3QtJHt0ZXh0fS0ke2l9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9e3RleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXtwcm9wcy5pY29ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25UYXA9e3MuaGFuZGxlVG9hc3RJdGVtVGFwfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0FwVG9hc3RJdGVtPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXBUb2FzdDsiXX0=