UNPKG

15.5 kBJavaScriptView Raw
1/**
2 * Dialog to confirm.
3 * @class ApConfirmDialog
4 */
5
6'use strict';
7
8Object.defineProperty(exports, "__esModule", {
9 value: true
10});
11
12var _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; };
13
14var _react = require('react');
15
16var _react2 = _interopRequireDefault(_react);
17
18var _classnames = require('classnames');
19
20var _classnames2 = _interopRequireDefault(_classnames);
21
22var _apemanReactCheckbox = require('apeman-react-checkbox');
23
24var _apemanReactButton = require('apeman-react-button');
25
26var _apemanReactMixinPure = require('apeman-react-mixin-pure');
27
28var _ap_dialog = require('./ap_dialog');
29
30var _ap_dialog2 = _interopRequireDefault(_ap_dialog);
31
32var _uuid = require('uuid');
33
34var _uuid2 = _interopRequireDefault(_uuid);
35
36function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
38/** lends ApConfirmDialog */
39var ApConfirmDialog = _react2.default.createClass({
40 displayName: 'ApConfirmDialog',
41
42
43 // --------------------
44 // Specs
45 // --------------------
46
47 propTypes: {
48 present: _react.PropTypes.bool.isRequired,
49 /** Handler for submit event */
50 onSubmit: _react.PropTypes.func,
51 /** Handler for cancel event */
52 onCancel: _react.PropTypes.func,
53 /** Dialog title */
54 title: _react.PropTypes.string,
55 /** Dialog message */
56 message: _react.PropTypes.string,
57 /** Id of checkbox */
58 checkboxId: _react.PropTypes.string,
59 /** Name of checkbox */
60 checkboxName: _react.PropTypes.string,
61 /** Label text of checkbox */
62 checkboxText: _react.PropTypes.string,
63 /** Errot text when not checked */
64 errorText: _react.PropTypes.string,
65 /** Submit button text */
66 submitText: _react.PropTypes.string
67 },
68
69 mixins: [_apemanReactMixinPure.ApPureMixin],
70
71 statics: {},
72
73 getInitialState: function getInitialState() {
74 return {
75 checked: false,
76 errored: false
77 };
78 },
79 getDefaultProps: function getDefaultProps() {
80 var id = _uuid2.default.v4().replace(/\-/g, '');
81 return {
82 onSubmit: null,
83 onCancel: null,
84 checkboxId: 'ap-confirm-dialog-checkbox-' + id,
85 checkboxName: 'ap-confirm-check-' + id,
86 checkboxText: null,
87 submitText: 'submit',
88 errorText: 'Needs check before submit.',
89 message: 'Once destroyed, there is no going back. Please be certain.'
90 };
91 },
92 render: function render() {
93 var s = this;
94 var state = s.state;
95 var props = s.props;
96
97 if (!props.present) {
98 return null;
99 }
100 return _react2.default.createElement(
101 _ap_dialog2.default,
102 _extends({ className: (0, _classnames2.default)('ap-confirm-dialog', props.className),
103 style: Object.assign({}, props.style),
104 onClose: s.handleCancel
105 }, props),
106 _react2.default.createElement(
107 'p',
108 { className: 'ap-confirm-dialog-message' },
109 props.message
110 ),
111 _react2.default.createElement(
112 'div',
113 null,
114 props.children
115 ),
116 _react2.default.createElement(
117 'div',
118 { className: 'ap-confirm-dialog-control' },
119 s._renderError(state.errored),
120 s._renderCheckbox(state.checked),
121 s._renderSubmitButton(state.checked)
122 )
123 );
124 },
125 toggleCheckbox: function toggleCheckbox() {
126 var s = this;
127 var state = s.state;
128 s.setState({
129 checked: !state.checked,
130 errored: false
131 });
132 },
133 handleSubmit: function handleSubmit(e) {
134 var s = this;
135 var state = s.state;
136 var props = s.props;
137
138 if (!state.checked) {
139 s.setState({
140 errored: true
141 });
142 return;
143 }
144 s.setState({
145 errored: false
146 });
147 if (props.onSubmit) {
148 props.onSubmit(e);
149 }
150 },
151 handleCancel: function handleCancel(e) {
152 var s = this;
153 var props = s.props;
154
155 s.setState({ errored: false });
156 if (props.onCancel) {
157 props.onCancel(e);
158 }
159 },
160
161
162 // ------------------
163 // Private
164 // ------------------
165 _renderError: function _renderError(errored) {
166 var s = this;
167 var props = s.props;
168
169 if (!errored) {
170 return null;
171 }
172 return _react2.default.createElement(
173 'div',
174 { className: 'ap-confirm-dialog-err' },
175 _react2.default.createElement(
176 'span',
177 null,
178 props.errorText
179 )
180 );
181 },
182 _renderCheckbox: function _renderCheckbox(checked) {
183 var s = this;
184 var props = s.props;
185
186 return _react2.default.createElement(
187 'div',
188 null,
189 _react2.default.createElement(_apemanReactCheckbox.ApCheckbox, { className: 'ap-confirm-dialog-checkbox',
190 checked: checked,
191 name: props.checkboxName,
192 id: props.checkboxId,
193 title: props.checkboxText,
194 onChange: s.toggleCheckbox,
195 value: 'YES'
196
197 })
198 );
199 },
200 _renderSubmitButton: function _renderSubmitButton(checked) {
201 var s = this;
202 var props = s.props;
203
204 return _react2.default.createElement(
205 _apemanReactButton.ApButton,
206 { onTap: s.handleSubmit,
207 disabled: false,
208 primary: true,
209 className: (0, _classnames2.default)('ap-confirm-dialog-button', {
210 'ap-confirm-dialog-button-disabled': !checked
211 }) },
212 _react2.default.createElement(
213 'span',
214 { className: 'ap-confirm-dialog-button-text' },
215 props.submitText
216 )
217 );
218 }
219});
220
221exports.default = ApConfirmDialog;
222//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwX2NvbmZpcm1fZGlhbG9nLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUtBOzs7Ozs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUNBOzs7Ozs7O0FBR0EsSUFBTSxrQkFBa0IsZ0JBQU0sV0FBTixDQUFrQjtBQUFBOzs7Ozs7O0FBTXhDLGFBQVc7QUFDVCxhQUFTLGlCQUFNLElBQU4sQ0FBVyxVQURYOztBQUdULGNBQVUsaUJBQU0sSUFIUDs7QUFLVCxjQUFVLGlCQUFNLElBTFA7O0FBT1QsV0FBTyxpQkFBTSxNQVBKOztBQVNULGFBQVMsaUJBQU0sTUFUTjs7QUFXVCxnQkFBWSxpQkFBTSxNQVhUOztBQWFULGtCQUFjLGlCQUFNLE1BYlg7O0FBZVQsa0JBQWMsaUJBQU0sTUFmWDs7QUFpQlQsZUFBVyxpQkFBTSxNQWpCUjs7QUFtQlQsZ0JBQVksaUJBQU07QUFuQlQsR0FONkI7O0FBNEJ4QyxVQUFRLG1DQTVCZ0M7O0FBZ0N4QyxXQUFTLEVBaEMrQjs7QUFrQ3hDLGlCQWxDd0MsNkJBa0NyQjtBQUNqQixXQUFPO0FBQ0wsZUFBUyxLQURKO0FBRUwsZUFBUztBQUZKLEtBQVA7QUFJRCxHQXZDdUM7QUF5Q3hDLGlCQXpDd0MsNkJBeUNyQjtBQUNqQixRQUFJLEtBQUssZUFBSyxFQUFMLEdBQVUsT0FBVixDQUFrQixLQUFsQixFQUF5QixFQUF6QixDQUFUO0FBQ0EsV0FBTztBQUNMLGdCQUFVLElBREw7QUFFTCxnQkFBVSxJQUZMO0FBR0wsa0RBQTBDLEVBSHJDO0FBSUwsMENBQWtDLEVBSjdCO0FBS0wsb0JBQWMsSUFMVDtBQU1MLGtCQUFZLFFBTlA7QUFPTCxpQkFBVyw0QkFQTjtBQVFMLGVBQVM7QUFSSixLQUFQO0FBVUQsR0FyRHVDO0FBdUR4QyxRQXZEd0Msb0JBdUQ5QjtBQUNSLFFBQU0sSUFBSSxJQUFWO0FBRFEsUUFFRixLQUZFLEdBRWUsQ0FGZixDQUVGLEtBRkU7QUFBQSxRQUVLLEtBRkwsR0FFZSxDQUZmLENBRUssS0FGTDs7QUFHUixRQUFJLENBQUMsTUFBTSxPQUFYLEVBQW9CO0FBQ2xCLGFBQU8sSUFBUDtBQUNEO0FBQ0QsV0FDRTtBQUFBO01BQUEsV0FBVSxXQUFZLDBCQUFXLG1CQUFYLEVBQWdDLE1BQU0sU0FBdEMsQ0FBdEI7QUFDVSxlQUFRLE9BQU8sTUFBUCxDQUFjLEVBQWQsRUFBa0IsTUFBTSxLQUF4QixDQURsQjtBQUVVLGlCQUFVLEVBQUU7QUFGdEIsU0FHTyxLQUhQO01BS0U7QUFBQTtRQUFBLEVBQUcsV0FBVSwyQkFBYjtRQUNJLE1BQU07QUFEVixPQUxGO01BUUU7QUFBQTtRQUFBO1FBQU8sTUFBTTtBQUFiLE9BUkY7TUFTRTtBQUFBO1FBQUEsRUFBSyxXQUFVLDJCQUFmO1FBQ0ksRUFBRSxZQUFGLENBQWUsTUFBTSxPQUFyQixDQURKO1FBRUksRUFBRSxlQUFGLENBQWtCLE1BQU0sT0FBeEIsQ0FGSjtRQUdJLEVBQUUsbUJBQUYsQ0FBc0IsTUFBTSxPQUE1QjtBQUhKO0FBVEYsS0FERjtBQWlCRCxHQTlFdUM7QUFnRnhDLGdCQWhGd0MsNEJBZ0Z2QjtBQUNmLFFBQU0sSUFBSSxJQUFWO0FBQ0EsUUFBSSxRQUFRLEVBQUUsS0FBZDtBQUNBLE1BQUUsUUFBRixDQUFXO0FBQ1QsZUFBUyxDQUFDLE1BQU0sT0FEUDtBQUVULGVBQVM7QUFGQSxLQUFYO0FBSUQsR0F2RnVDO0FBeUZ4QyxjQXpGd0Msd0JBeUYzQixDQXpGMkIsRUF5RnhCO0FBQ2QsUUFBTSxJQUFJLElBQVY7QUFEYyxRQUVSLEtBRlEsR0FFUyxDQUZULENBRVIsS0FGUTtBQUFBLFFBRUQsS0FGQyxHQUVTLENBRlQsQ0FFRCxLQUZDOztBQUdkLFFBQUksQ0FBQyxNQUFNLE9BQVgsRUFBb0I7QUFDbEIsUUFBRSxRQUFGLENBQVc7QUFDVCxpQkFBUztBQURBLE9BQVg7QUFHQTtBQUNEO0FBQ0QsTUFBRSxRQUFGLENBQVc7QUFDVCxlQUFTO0FBREEsS0FBWDtBQUdBLFFBQUksTUFBTSxRQUFWLEVBQW9CO0FBQ2xCLFlBQU0sUUFBTixDQUFlLENBQWY7QUFDRDtBQUNGLEdBeEd1QztBQTBHeEMsY0ExR3dDLHdCQTBHM0IsQ0ExRzJCLEVBMEd4QjtBQUNSLFlBQUksSUFBSjtBQURRLFFBRVYsS0FGVSxHQUVBLENBRkEsQ0FFVixLQUZVOztBQUdkLE1BQUUsUUFBRixDQUFXLEVBQUUsU0FBUyxLQUFYLEVBQVg7QUFDQSxRQUFJLE1BQU0sUUFBVixFQUFvQjtBQUNsQixZQUFNLFFBQU4sQ0FBZSxDQUFmO0FBQ0Q7QUFDRixHQWpIdUM7Ozs7OztBQXNIeEMsY0F0SHdDLHdCQXNIM0IsT0F0SDJCLEVBc0hsQjtBQUNwQixRQUFNLElBQUksSUFBVjtBQURvQixRQUVkLEtBRmMsR0FFSixDQUZJLENBRWQsS0FGYzs7QUFHcEIsUUFBSSxDQUFDLE9BQUwsRUFBYztBQUNaLGFBQU8sSUFBUDtBQUNEO0FBQ0QsV0FDRTtBQUFBO01BQUEsRUFBSyxXQUFVLHVCQUFmO01BQ0U7QUFBQTtRQUFBO1FBQVEsTUFBTTtBQUFkO0FBREYsS0FERjtBQUtELEdBakl1QztBQWtJeEMsaUJBbEl3QywyQkFrSXZCLE9BbEl1QixFQWtJZDtBQUN4QixRQUFNLElBQUksSUFBVjtBQUR3QixRQUVsQixLQUZrQixHQUVSLENBRlEsQ0FFbEIsS0FGa0I7O0FBR3hCLFdBQ0U7QUFBQTtNQUFBO01BQ0UsaUVBQVksV0FBVSw0QkFBdEI7QUFDWSxpQkFBVSxPQUR0QjtBQUVZLGNBQU8sTUFBTSxZQUZ6QjtBQUdZLFlBQUssTUFBTSxVQUh2QjtBQUlZLGVBQVEsTUFBTSxZQUoxQjtBQUtZLGtCQUFXLEVBQUUsY0FMekI7QUFNWSxlQUFNOztBQU5sQjtBQURGLEtBREY7QUFhRCxHQWxKdUM7QUFtSnhDLHFCQW5Kd0MsK0JBbUpuQixPQW5KbUIsRUFtSlY7QUFDNUIsUUFBTSxJQUFJLElBQVY7QUFENEIsUUFFdEIsS0FGc0IsR0FFWixDQUZZLENBRXRCLEtBRnNCOztBQUc1QixXQUNFO0FBQUE7TUFBQSxFQUFVLE9BQVEsRUFBRSxZQUFwQjtBQUNVLGtCQUFXLEtBRHJCO0FBRVUsaUJBQVUsSUFGcEI7QUFHVSxtQkFBWSwwQkFBVywwQkFBWCxFQUF1QztBQUN2QywrQ0FBcUMsQ0FBQztBQURDLFNBQXZDLENBSHRCO01BTUU7QUFBQTtRQUFBLEVBQU0sV0FBVSwrQkFBaEI7UUFBa0QsTUFBTTtBQUF4RDtBQU5GLEtBREY7QUFVRDtBQWhLdUMsQ0FBbEIsQ0FBeEI7O2tCQW9LZSxlIiwiZmlsZSI6ImFwX2NvbmZpcm1fZGlhbG9nLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9va3VuaXNoaW5pc2hpL1Byb2plY3RzL2FwZW1hbi1wcm9qZWN0cy9hcGVtYW4tcmVhY3QtZGlhbG9nL2xpYiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGlhbG9nIHRvIGNvbmZpcm0uXG4gKiBAY2xhc3MgQXBDb25maXJtRGlhbG9nXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmltcG9ydCBSZWFjdCwge1Byb3BUeXBlcyBhcyB0eXBlc30gZnJvbSAncmVhY3QnXG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuXG5pbXBvcnQge0FwQ2hlY2tib3h9IGZyb20gJ2FwZW1hbi1yZWFjdC1jaGVja2JveCdcbmltcG9ydCB7QXBCdXR0b259IGZyb20gJ2FwZW1hbi1yZWFjdC1idXR0b24nXG5pbXBvcnQge0FwUHVyZU1peGlufSBmcm9tICdhcGVtYW4tcmVhY3QtbWl4aW4tcHVyZSdcbmltcG9ydCBBcERpYWxvZyBmcm9tICcuL2FwX2RpYWxvZydcbmltcG9ydCB1dWlkIGZyb20gJ3V1aWQnXG5cbi8qKiBsZW5kcyBBcENvbmZpcm1EaWFsb2cgKi9cbmNvbnN0IEFwQ29uZmlybURpYWxvZyA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBTcGVjc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByb3BUeXBlczoge1xuICAgIHByZXNlbnQ6IHR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICAvKiogSGFuZGxlciBmb3Igc3VibWl0IGV2ZW50ICovXG4gICAgb25TdWJtaXQ6IHR5cGVzLmZ1bmMsXG4gICAgLyoqIEhhbmRsZXIgZm9yIGNhbmNlbCBldmVudCAqL1xuICAgIG9uQ2FuY2VsOiB0eXBlcy5mdW5jLFxuICAgIC8qKiBEaWFsb2cgdGl0bGUgKi9cbiAgICB0aXRsZTogdHlwZXMuc3RyaW5nLFxuICAgIC8qKiBEaWFsb2cgbWVzc2FnZSAqL1xuICAgIG1lc3NhZ2U6IHR5cGVzLnN0cmluZyxcbiAgICAvKiogSWQgb2YgY2hlY2tib3ggKi9cbiAgICBjaGVja2JveElkOiB0eXBlcy5zdHJpbmcsXG4gICAgLyoqIE5hbWUgb2YgY2hlY2tib3ggKi9cbiAgICBjaGVja2JveE5hbWU6IHR5cGVzLnN0cmluZyxcbiAgICAvKiogTGFiZWwgdGV4dCBvZiBjaGVja2JveCAqL1xuICAgIGNoZWNrYm94VGV4dDogdHlwZXMuc3RyaW5nLFxuICAgIC8qKiBFcnJvdCB0ZXh0IHdoZW4gbm90IGNoZWNrZWQgKi9cbiAgICBlcnJvclRleHQ6IHR5cGVzLnN0cmluZyxcbiAgICAvKiogU3VibWl0IGJ1dHRvbiB0ZXh0ICovXG4gICAgc3VibWl0VGV4dDogdHlwZXMuc3RyaW5nXG4gIH0sXG5cbiAgbWl4aW5zOiBbXG4gICAgQXBQdXJlTWl4aW5cbiAgXSxcblxuICBzdGF0aWNzOiB7fSxcblxuICBnZXRJbml0aWFsU3RhdGUgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICAgIGVycm9yZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGdldERlZmF1bHRQcm9wcyAoKSB7XG4gICAgbGV0IGlkID0gdXVpZC52NCgpLnJlcGxhY2UoL1xcLS9nLCAnJylcbiAgICByZXR1cm4ge1xuICAgICAgb25TdWJtaXQ6IG51bGwsXG4gICAgICBvbkNhbmNlbDogbnVsbCxcbiAgICAgIGNoZWNrYm94SWQ6IGBhcC1jb25maXJtLWRpYWxvZy1jaGVja2JveC0ke2lkfWAsXG4gICAgICBjaGVja2JveE5hbWU6IGBhcC1jb25maXJtLWNoZWNrLSR7aWR9YCxcbiAgICAgIGNoZWNrYm94VGV4dDogbnVsbCxcbiAgICAgIHN1Ym1pdFRleHQ6ICdzdWJtaXQnLFxuICAgICAgZXJyb3JUZXh0OiAnTmVlZHMgY2hlY2sgYmVmb3JlIHN1Ym1pdC4nLFxuICAgICAgbWVzc2FnZTogJ09uY2UgZGVzdHJveWVkLCB0aGVyZSBpcyBubyBnb2luZyBiYWNrLiBQbGVhc2UgYmUgY2VydGFpbi4nXG4gICAgfVxuICB9LFxuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBzdGF0ZSwgcHJvcHMgfSA9IHNcbiAgICBpZiAoIXByb3BzLnByZXNlbnQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8QXBEaWFsb2cgY2xhc3NOYW1lPXsgY2xhc3NuYW1lcygnYXAtY29uZmlybS1kaWFsb2cnLCBwcm9wcy5jbGFzc05hbWUpIH1cbiAgICAgICAgICAgICAgICBzdHlsZT17IE9iamVjdC5hc3NpZ24oe30sIHByb3BzLnN0eWxlKSB9XG4gICAgICAgICAgICAgICAgb25DbG9zZT17IHMuaGFuZGxlQ2FuY2VsIH1cbiAgICAgICAgeyAuLi5wcm9wcyB9XG4gICAgICA+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImFwLWNvbmZpcm0tZGlhbG9nLW1lc3NhZ2VcIj5cbiAgICAgICAgICB7IHByb3BzLm1lc3NhZ2UgfVxuICAgICAgICA8L3A+XG4gICAgICAgIDxkaXY+eyBwcm9wcy5jaGlsZHJlbiB9PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXAtY29uZmlybS1kaWFsb2ctY29udHJvbFwiPlxuICAgICAgICAgIHsgcy5fcmVuZGVyRXJyb3Ioc3RhdGUuZXJyb3JlZCkgfVxuICAgICAgICAgIHsgcy5fcmVuZGVyQ2hlY2tib3goc3RhdGUuY2hlY2tlZCkgfVxuICAgICAgICAgIHsgcy5fcmVuZGVyU3VibWl0QnV0dG9uKHN0YXRlLmNoZWNrZWQpIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0FwRGlhbG9nPlxuICAgIClcbiAgfSxcblxuICB0b2dnbGVDaGVja2JveCgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCBzdGF0ZSA9IHMuc3RhdGVcbiAgICBzLnNldFN0YXRlKHtcbiAgICAgIGNoZWNrZWQ6ICFzdGF0ZS5jaGVja2VkLFxuICAgICAgZXJyb3JlZDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIGhhbmRsZVN1Ym1pdChlKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBzdGF0ZSwgcHJvcHMgfSA9IHNcbiAgICBpZiAoIXN0YXRlLmNoZWNrZWQpIHtcbiAgICAgIHMuc2V0U3RhdGUoe1xuICAgICAgICBlcnJvcmVkOiB0cnVlXG4gICAgICB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHMuc2V0U3RhdGUoe1xuICAgICAgZXJyb3JlZDogZmFsc2VcbiAgICB9KVxuICAgIGlmIChwcm9wcy5vblN1Ym1pdCkge1xuICAgICAgcHJvcHMub25TdWJtaXQoZSlcbiAgICB9XG4gIH0sXG5cbiAgaGFuZGxlQ2FuY2VsKGUpIHtcbiAgICBjb25zdCBzID0gdGhpcyxcbiAgICAgIHsgcHJvcHMgfSA9IHNcbiAgICBzLnNldFN0YXRlKHsgZXJyb3JlZDogZmFsc2UgfSlcbiAgICBpZiAocHJvcHMub25DYW5jZWwpIHtcbiAgICAgIHByb3BzLm9uQ2FuY2VsKGUpXG4gICAgfVxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQcml2YXRlXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuICBfcmVuZGVyRXJyb3IoZXJyb3JlZCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgbGV0IHsgcHJvcHMgfSA9IHNcbiAgICBpZiAoIWVycm9yZWQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImFwLWNvbmZpcm0tZGlhbG9nLWVyclwiPlxuICAgICAgICA8c3Bhbj57IHByb3BzLmVycm9yVGV4dCB9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9LFxuICBfcmVuZGVyQ2hlY2tib3ggKGNoZWNrZWQpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxBcENoZWNrYm94IGNsYXNzTmFtZT1cImFwLWNvbmZpcm0tZGlhbG9nLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17IGNoZWNrZWQgfVxuICAgICAgICAgICAgICAgICAgICBuYW1lPXsgcHJvcHMuY2hlY2tib3hOYW1lIH1cbiAgICAgICAgICAgICAgICAgICAgaWQ9eyBwcm9wcy5jaGVja2JveElkIH1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9eyBwcm9wcy5jaGVja2JveFRleHQgfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17IHMudG9nZ2xlQ2hlY2tib3ggfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIllFU1wiXG5cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfSxcbiAgX3JlbmRlclN1Ym1pdEJ1dHRvbiAoY2hlY2tlZCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgbGV0IHsgcHJvcHMgfSA9IHNcbiAgICByZXR1cm4gKFxuICAgICAgPEFwQnV0dG9uIG9uVGFwPXsgcy5oYW5kbGVTdWJtaXQgfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXsgZmFsc2UgfVxuICAgICAgICAgICAgICAgIHByaW1hcnk9eyB0cnVlIH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9eyBjbGFzc25hbWVzKCdhcC1jb25maXJtLWRpYWxvZy1idXR0b24nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwLWNvbmZpcm0tZGlhbG9nLWJ1dHRvbi1kaXNhYmxlZCc6ICFjaGVja2VkXG4gICAgICAgICAgICAgICAgICAgICAgfSkgfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYXAtY29uZmlybS1kaWFsb2ctYnV0dG9uLXRleHRcIj57IHByb3BzLnN1Ym1pdFRleHQgfTwvc3Bhbj5cbiAgICAgIDwvQXBCdXR0b24+XG4gICAgKVxuICB9XG5cbn0pXG5cbmV4cG9ydCBkZWZhdWx0IEFwQ29uZmlybURpYWxvZ1xuIl19
\No newline at end of file