openstack-uicore-foundation 3.0.84 → 3.0.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/actions.js +1 -1878
- package/lib/components.js +1 -11144
- package/lib/css/components.css +1 -1024
- package/lib/methods.js +1 -2089
- package/lib/reducers.js +1 -1800
- package/lib/utils/questions-set.js +1 -324
- package/lib.zip +0 -0
- package/package.json +1 -1
|
@@ -1,324 +1 @@
|
|
|
1
|
-
(function
|
|
2
|
-
if(typeof exports === 'object' && typeof module === 'object')
|
|
3
|
-
module.exports = factory();
|
|
4
|
-
else if(typeof define === 'function' && define.amd)
|
|
5
|
-
define("openstack-uicore-foundation", [], factory);
|
|
6
|
-
else if(typeof exports === 'object')
|
|
7
|
-
exports["openstack-uicore-foundation"] = factory();
|
|
8
|
-
else
|
|
9
|
-
root["openstack-uicore-foundation"] = factory();
|
|
10
|
-
})(this, function() {
|
|
11
|
-
return /******/ (function(modules) { // webpackBootstrap
|
|
12
|
-
/******/ // The module cache
|
|
13
|
-
/******/ var installedModules = {};
|
|
14
|
-
/******/
|
|
15
|
-
/******/ // The require function
|
|
16
|
-
/******/ function __webpack_require__(moduleId) {
|
|
17
|
-
/******/
|
|
18
|
-
/******/ // Check if module is in cache
|
|
19
|
-
/******/ if(installedModules[moduleId]) {
|
|
20
|
-
/******/ return installedModules[moduleId].exports;
|
|
21
|
-
/******/ }
|
|
22
|
-
/******/ // Create a new module (and put it into the cache)
|
|
23
|
-
/******/ var module = installedModules[moduleId] = {
|
|
24
|
-
/******/ i: moduleId,
|
|
25
|
-
/******/ l: false,
|
|
26
|
-
/******/ exports: {}
|
|
27
|
-
/******/ };
|
|
28
|
-
/******/
|
|
29
|
-
/******/ // Execute the module function
|
|
30
|
-
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
31
|
-
/******/
|
|
32
|
-
/******/ // Flag the module as loaded
|
|
33
|
-
/******/ module.l = true;
|
|
34
|
-
/******/
|
|
35
|
-
/******/ // Return the exports of the module
|
|
36
|
-
/******/ return module.exports;
|
|
37
|
-
/******/ }
|
|
38
|
-
/******/
|
|
39
|
-
/******/
|
|
40
|
-
/******/ // expose the modules object (__webpack_modules__)
|
|
41
|
-
/******/ __webpack_require__.m = modules;
|
|
42
|
-
/******/
|
|
43
|
-
/******/ // expose the module cache
|
|
44
|
-
/******/ __webpack_require__.c = installedModules;
|
|
45
|
-
/******/
|
|
46
|
-
/******/ // define getter function for harmony exports
|
|
47
|
-
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
48
|
-
/******/ if(!__webpack_require__.o(exports, name)) {
|
|
49
|
-
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
|
50
|
-
/******/ }
|
|
51
|
-
/******/ };
|
|
52
|
-
/******/
|
|
53
|
-
/******/ // define __esModule on exports
|
|
54
|
-
/******/ __webpack_require__.r = function(exports) {
|
|
55
|
-
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
56
|
-
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
57
|
-
/******/ }
|
|
58
|
-
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
59
|
-
/******/ };
|
|
60
|
-
/******/
|
|
61
|
-
/******/ // create a fake namespace object
|
|
62
|
-
/******/ // mode & 1: value is a module id, require it
|
|
63
|
-
/******/ // mode & 2: merge all properties of value into the ns
|
|
64
|
-
/******/ // mode & 4: return value when already ns object
|
|
65
|
-
/******/ // mode & 8|1: behave like require
|
|
66
|
-
/******/ __webpack_require__.t = function(value, mode) {
|
|
67
|
-
/******/ if(mode & 1) value = __webpack_require__(value);
|
|
68
|
-
/******/ if(mode & 8) return value;
|
|
69
|
-
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
|
70
|
-
/******/ var ns = Object.create(null);
|
|
71
|
-
/******/ __webpack_require__.r(ns);
|
|
72
|
-
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
|
73
|
-
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
|
74
|
-
/******/ return ns;
|
|
75
|
-
/******/ };
|
|
76
|
-
/******/
|
|
77
|
-
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
78
|
-
/******/ __webpack_require__.n = function(module) {
|
|
79
|
-
/******/ var getter = module && module.__esModule ?
|
|
80
|
-
/******/ function getDefault() { return module['default']; } :
|
|
81
|
-
/******/ function getModuleExports() { return module; };
|
|
82
|
-
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
83
|
-
/******/ return getter;
|
|
84
|
-
/******/ };
|
|
85
|
-
/******/
|
|
86
|
-
/******/ // Object.prototype.hasOwnProperty.call
|
|
87
|
-
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
88
|
-
/******/
|
|
89
|
-
/******/ // __webpack_public_path__
|
|
90
|
-
/******/ __webpack_require__.p = "";
|
|
91
|
-
/******/
|
|
92
|
-
/******/
|
|
93
|
-
/******/ // Load entry module and return exports
|
|
94
|
-
/******/ return __webpack_require__(__webpack_require__.s = "./src/utils/questions-set.js");
|
|
95
|
-
/******/ })
|
|
96
|
-
/************************************************************************/
|
|
97
|
-
/******/ ({
|
|
98
|
-
|
|
99
|
-
/***/ "./src/utils/questions-set.js":
|
|
100
|
-
/*!************************************!*\
|
|
101
|
-
!*** ./src/utils/questions-set.js ***!
|
|
102
|
-
\************************************/
|
|
103
|
-
/*! exports provided: CheckBoxQuestionType, ComboBoxQuestionType, CheckBoxListQuestionType, RadioButtonListQuestionType, AllowedMultipleValueQuestionType, AnswerValuesOperator_And, AnswerValuesOperator_Or, VisibilityCondition_Equal, VisibilityCondition_NotEqual, Visibility_Visible, MainQuestionClassType, default */
|
|
104
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
105
|
-
|
|
106
|
-
"use strict";
|
|
107
|
-
__webpack_require__.r(__webpack_exports__);
|
|
108
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CheckBoxQuestionType", function() { return CheckBoxQuestionType; });
|
|
109
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComboBoxQuestionType", function() { return ComboBoxQuestionType; });
|
|
110
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CheckBoxListQuestionType", function() { return CheckBoxListQuestionType; });
|
|
111
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RadioButtonListQuestionType", function() { return RadioButtonListQuestionType; });
|
|
112
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AllowedMultipleValueQuestionType", function() { return AllowedMultipleValueQuestionType; });
|
|
113
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnswerValuesOperator_And", function() { return AnswerValuesOperator_And; });
|
|
114
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnswerValuesOperator_Or", function() { return AnswerValuesOperator_Or; });
|
|
115
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VisibilityCondition_Equal", function() { return VisibilityCondition_Equal; });
|
|
116
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VisibilityCondition_NotEqual", function() { return VisibilityCondition_NotEqual; });
|
|
117
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Visibility_Visible", function() { return Visibility_Visible; });
|
|
118
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MainQuestionClassType", function() { return MainQuestionClassType; });
|
|
119
|
-
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return QuestionsSet; });
|
|
120
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
121
|
-
|
|
122
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
123
|
-
|
|
124
|
-
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; }
|
|
125
|
-
|
|
126
|
-
const CheckBoxQuestionType = 'CheckBox';
|
|
127
|
-
const ComboBoxQuestionType = 'ComboBox';
|
|
128
|
-
const CheckBoxListQuestionType = 'CheckBoxList';
|
|
129
|
-
const RadioButtonListQuestionType = 'RadioButtonList';
|
|
130
|
-
const AllowedMultipleValueQuestionType = [ComboBoxQuestionType, CheckBoxListQuestionType, RadioButtonListQuestionType];
|
|
131
|
-
const AnswerValuesOperator_And = 'And';
|
|
132
|
-
const AnswerValuesOperator_Or = 'Or';
|
|
133
|
-
const VisibilityCondition_Equal = 'Equal';
|
|
134
|
-
const VisibilityCondition_NotEqual = 'NotEqual';
|
|
135
|
-
const Visibility_Visible = 'Visible';
|
|
136
|
-
const MainQuestionClassType = 'MainQuestion';
|
|
137
|
-
class QuestionsSet {
|
|
138
|
-
constructor(questions, answers = []) {
|
|
139
|
-
_defineProperty(this, "_parseQuestion", q => {
|
|
140
|
-
this.questionByName[q.name] = q;
|
|
141
|
-
this.questionById[parseInt(q.id)] = q;
|
|
142
|
-
if (q.hasOwnProperty('sub_question_rules')) for (let r of q.sub_question_rules) {
|
|
143
|
-
this.rules[parseInt(r.id)] = r;
|
|
144
|
-
|
|
145
|
-
this._parseQuestion(r.sub_question);
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
_defineProperty(this, "_parseQuestions", () => {
|
|
150
|
-
for (let q of this.questions) {
|
|
151
|
-
this._parseQuestion(q);
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
_defineProperty(this, "_allowsValues", q => {
|
|
156
|
-
return AllowedMultipleValueQuestionType.includes(q.type);
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
_defineProperty(this, "_allowsValue", (q, answer) => {
|
|
160
|
-
let value = answer.value.split(',').map(v => parseInt(v));
|
|
161
|
-
|
|
162
|
-
for (let av of value) {
|
|
163
|
-
if (!q.values.map(e => e.id).includes(av)) return false;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
return true;
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
_defineProperty(this, "_getAnswerFor", q => {
|
|
170
|
-
let id = Number.isInteger(q) ? q : q.id;
|
|
171
|
-
let a = this.answers[id] || null;
|
|
172
|
-
return a ? a : null;
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
_defineProperty(this, "_hasValue", answer => {
|
|
176
|
-
return answer.value !== '';
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
_defineProperty(this, "_answerContains", (answer, val) => {
|
|
180
|
-
return answer.value.split(',').includes(val);
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
_defineProperty(this, "_isSubQuestionVisible", rule => {
|
|
184
|
-
let initialCondition = rule.answer_values_operator === AnswerValuesOperator_And ? true : false;
|
|
185
|
-
|
|
186
|
-
const parentQuestionAnswer = this._getAnswerFor(rule.parent_question_id);
|
|
187
|
-
|
|
188
|
-
if (!parentQuestionAnswer) {
|
|
189
|
-
initialCondition = rule.visibility_condition === VisibilityCondition_Equal ? false : true;
|
|
190
|
-
} else {
|
|
191
|
-
switch (rule.visibility_condition) {
|
|
192
|
-
case VisibilityCondition_Equal:
|
|
193
|
-
{
|
|
194
|
-
for (let answerValue of rule.answer_values) {
|
|
195
|
-
if (rule.answer_values_operator === AnswerValuesOperator_And) initialCondition = initialCondition && this._answerContains(parentQuestionAnswer, answerValue);else initialCondition = initialCondition || this._answerContains(parentQuestionAnswer, answerValue);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
break;
|
|
199
|
-
|
|
200
|
-
case VisibilityCondition_NotEqual:
|
|
201
|
-
{
|
|
202
|
-
for (let answerValue of rule.answer_values) {
|
|
203
|
-
if (rule.answer_values_operator === AnswerValuesOperator_And) initialCondition = initialCondition && !this._answerContains(parentQuestionAnswer, answerValue);else initialCondition = initialCondition || !this._answerContains(parentQuestionAnswer, answerValue);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
break;
|
|
207
|
-
}
|
|
208
|
-
} // final visibility check
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
if (rule.visibility === Visibility_Visible) {
|
|
212
|
-
return initialCondition;
|
|
213
|
-
} // not visible
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
return !initialCondition;
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
_defineProperty(this, "_isAnswered", q => {
|
|
220
|
-
const answer = this._getAnswerFor(q);
|
|
221
|
-
|
|
222
|
-
if (q.class === MainQuestionClassType) {
|
|
223
|
-
if (!q.mandatory) return true;
|
|
224
|
-
if (!answer) return false;
|
|
225
|
-
if (!this._hasValue(answer)) return false;
|
|
226
|
-
if (this._allowsValues(q) && !this._allowsValue(q, answer)) return false;
|
|
227
|
-
return true;
|
|
228
|
-
} // check parent rules ...
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
for (let ruleId of q.parent_rules) {
|
|
232
|
-
if (!this._isSubQuestionVisible(this.rules[ruleId])) // if question is not visible skip it
|
|
233
|
-
continue;
|
|
234
|
-
if (!q.mandatory) return true;
|
|
235
|
-
if (!answer) return false;
|
|
236
|
-
if (!this._hasValue(answer)) return false;
|
|
237
|
-
if (this._allowsValues(q) && !this._allowsValue(q, answer)) return false;
|
|
238
|
-
return true;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
return true;
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
_defineProperty(this, "_checkQuestion", q => {
|
|
245
|
-
let res = this._isAnswered(q);
|
|
246
|
-
|
|
247
|
-
if (q.hasOwnProperty('sub_question_rules')) for (let rule of q.sub_question_rules) {
|
|
248
|
-
// check recursive all the tree till leaves ...
|
|
249
|
-
res = res && this._checkQuestion(rule.sub_question);
|
|
250
|
-
}
|
|
251
|
-
return res;
|
|
252
|
-
});
|
|
253
|
-
|
|
254
|
-
_defineProperty(this, "_formatQuestionAnswer", question => {
|
|
255
|
-
var _this$originalAnswers;
|
|
256
|
-
|
|
257
|
-
let res = {};
|
|
258
|
-
let userAnswer = (_this$originalAnswers = this.originalAnswers.find(a => a.question_id === question.id)) === null || _this$originalAnswers === void 0 ? void 0 : _this$originalAnswers.value;
|
|
259
|
-
|
|
260
|
-
if (userAnswer) {
|
|
261
|
-
if (question.type === CheckBoxQuestionType) userAnswer = userAnswer === 'false' ? false : !!userAnswer; //if (question.type === RadioButtonListQuestionType || question.type === ComboBoxQuestionType) userAnswer = userAnswer;
|
|
262
|
-
|
|
263
|
-
if (question.type === CheckBoxListQuestionType) userAnswer = userAnswer.split(',').map(ansVal => ansVal) || [];
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
res[question.name] = userAnswer || '';
|
|
267
|
-
if (question.hasOwnProperty('sub_question_rules')) for (let rule of question.sub_question_rules) {
|
|
268
|
-
// check recursive all the tree till leaves ...
|
|
269
|
-
let res1 = this._formatQuestionAnswer(rule.sub_question);
|
|
270
|
-
|
|
271
|
-
res = _objectSpread(_objectSpread({}, res), res1);
|
|
272
|
-
}
|
|
273
|
-
return res;
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
_defineProperty(this, "formatAnswers", () => {
|
|
277
|
-
let res = {};
|
|
278
|
-
this.questions.forEach(q => {
|
|
279
|
-
let res1 = this._formatQuestionAnswer(q);
|
|
280
|
-
|
|
281
|
-
res = _objectSpread(_objectSpread({}, res), res1);
|
|
282
|
-
});
|
|
283
|
-
return res;
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
_defineProperty(this, "completed", () => {
|
|
287
|
-
let res = true;
|
|
288
|
-
|
|
289
|
-
for (let q of this.questions) {
|
|
290
|
-
res = res && this._checkQuestion(q);
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
return res;
|
|
294
|
-
});
|
|
295
|
-
|
|
296
|
-
_defineProperty(this, "getQuestionByName", name => {
|
|
297
|
-
return this.questionByName[name] || null;
|
|
298
|
-
});
|
|
299
|
-
|
|
300
|
-
_defineProperty(this, "getQuestionById", id => {
|
|
301
|
-
return this.questionById[parseInt(id)] || null;
|
|
302
|
-
});
|
|
303
|
-
|
|
304
|
-
this.questions = questions;
|
|
305
|
-
this.originalAnswers = answers;
|
|
306
|
-
this.answers = []; // map answers to associate array
|
|
307
|
-
|
|
308
|
-
for (let a of this.originalAnswers) this.answers[a.question_id] = a;
|
|
309
|
-
|
|
310
|
-
this.questionByName = {};
|
|
311
|
-
this.questionById = {}; // associative array ( rule id , rule);
|
|
312
|
-
|
|
313
|
-
this.rules = {};
|
|
314
|
-
|
|
315
|
-
this._parseQuestions();
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
/***/ })
|
|
321
|
-
|
|
322
|
-
/******/ });
|
|
323
|
-
});
|
|
324
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvdXRpbHMvcXVlc3Rpb25zLXNldC5qcyJdLCJuYW1lcyI6WyJDaGVja0JveFF1ZXN0aW9uVHlwZSIsIkNvbWJvQm94UXVlc3Rpb25UeXBlIiwiQ2hlY2tCb3hMaXN0UXVlc3Rpb25UeXBlIiwiUmFkaW9CdXR0b25MaXN0UXVlc3Rpb25UeXBlIiwiQWxsb3dlZE11bHRpcGxlVmFsdWVRdWVzdGlvblR5cGUiLCJBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQiLCJBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9PciIsIlZpc2liaWxpdHlDb25kaXRpb25fRXF1YWwiLCJWaXNpYmlsaXR5Q29uZGl0aW9uX05vdEVxdWFsIiwiVmlzaWJpbGl0eV9WaXNpYmxlIiwiTWFpblF1ZXN0aW9uQ2xhc3NUeXBlIiwiUXVlc3Rpb25zU2V0IiwiY29uc3RydWN0b3IiLCJxdWVzdGlvbnMiLCJhbnN3ZXJzIiwicSIsInF1ZXN0aW9uQnlOYW1lIiwibmFtZSIsInF1ZXN0aW9uQnlJZCIsInBhcnNlSW50IiwiaWQiLCJoYXNPd25Qcm9wZXJ0eSIsInIiLCJzdWJfcXVlc3Rpb25fcnVsZXMiLCJydWxlcyIsIl9wYXJzZVF1ZXN0aW9uIiwic3ViX3F1ZXN0aW9uIiwiaW5jbHVkZXMiLCJ0eXBlIiwiYW5zd2VyIiwidmFsdWUiLCJzcGxpdCIsIm1hcCIsInYiLCJhdiIsInZhbHVlcyIsImUiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJhIiwidmFsIiwicnVsZSIsImluaXRpYWxDb25kaXRpb24iLCJhbnN3ZXJfdmFsdWVzX29wZXJhdG9yIiwicGFyZW50UXVlc3Rpb25BbnN3ZXIiLCJfZ2V0QW5zd2VyRm9yIiwicGFyZW50X3F1ZXN0aW9uX2lkIiwidmlzaWJpbGl0eV9jb25kaXRpb24iLCJhbnN3ZXJWYWx1ZSIsImFuc3dlcl92YWx1ZXMiLCJfYW5zd2VyQ29udGFpbnMiLCJ2aXNpYmlsaXR5IiwiY2xhc3MiLCJtYW5kYXRvcnkiLCJfaGFzVmFsdWUiLCJfYWxsb3dzVmFsdWVzIiwiX2FsbG93c1ZhbHVlIiwicnVsZUlkIiwicGFyZW50X3J1bGVzIiwiX2lzU3ViUXVlc3Rpb25WaXNpYmxlIiwicmVzIiwiX2lzQW5zd2VyZWQiLCJfY2hlY2tRdWVzdGlvbiIsInF1ZXN0aW9uIiwidXNlckFuc3dlciIsIm9yaWdpbmFsQW5zd2VycyIsImZpbmQiLCJxdWVzdGlvbl9pZCIsImFuc1ZhbCIsInJlczEiLCJfZm9ybWF0UXVlc3Rpb25BbnN3ZXIiLCJmb3JFYWNoIiwiX3BhcnNlUXVlc3Rpb25zIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztRQ1ZBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNB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bEJHLEVBQUQsSUFBUTtNQUN0QixPQUFPLEtBQUtGLFlBQUwsQ0FBa0JDLFFBQVEsQ0FBQ0MsRUFBRCxDQUExQixLQUFtQyxJQUExQztJQUNILENBNUtvQzs7SUFDakMsS0FBS1AsU0FBTCxHQUFpQkEsU0FBakI7SUFDQSxLQUFLb0QsZUFBTCxHQUF1Qm5ELE9BQXZCO0lBQ0EsS0FBS0EsT0FBTCxHQUFlLEVBQWYsQ0FIaUMsQ0FJakM7O0lBQ0EsS0FBSyxJQUFJeUIsQ0FBVCxJQUFjLEtBQUswQixlQUFuQixFQUNJLEtBQUtuRCxPQUFMLENBQWF5QixDQUFDLENBQUM0QixXQUFmLElBQThCNUIsQ0FBOUI7O0lBQ0osS0FBS3ZCLGNBQUwsR0FBc0IsRUFBdEI7SUFDQSxLQUFLRSxZQUFMLEdBQW9CLEVBQXBCLENBUmlDLENBU2pDOztJQUNBLEtBQUtNLEtBQUwsR0FBYSxFQUFiOztJQUNBLEtBQUtnRCxlQUFMO0VBQ0g7O0FBZDZCLEMiLCJmaWxlIjoidXRpbHMvcXVlc3Rpb25zLXNldC5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvblwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb25cIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy91dGlscy9xdWVzdGlvbnMtc2V0LmpzXCIpO1xuIiwiZXhwb3J0IGNvbnN0IENoZWNrQm94UXVlc3Rpb25UeXBlID0gJ0NoZWNrQm94JztcbmV4cG9ydCBjb25zdCBDb21ib0JveFF1ZXN0aW9uVHlwZSA9ICdDb21ib0JveCdcbmV4cG9ydCBjb25zdCBDaGVja0JveExpc3RRdWVzdGlvblR5cGUgPSAnQ2hlY2tCb3hMaXN0JztcbmV4cG9ydCBjb25zdCBSYWRpb0J1dHRvbkxpc3RRdWVzdGlvblR5cGUgPSAnUmFkaW9CdXR0b25MaXN0JztcbmV4cG9ydCBjb25zdCBBbGxvd2VkTXVsdGlwbGVWYWx1ZVF1ZXN0aW9uVHlwZSA9IFtDb21ib0JveFF1ZXN0aW9uVHlwZSwgQ2hlY2tCb3hMaXN0UXVlc3Rpb25UeXBlLCBSYWRpb0J1dHRvbkxpc3RRdWVzdGlvblR5cGVdO1xuZXhwb3J0IGNvbnN0IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZCA9ICdBbmQnO1xuZXhwb3J0IGNvbnN0IEFuc3dlclZhbHVlc09wZXJhdG9yX09yID0gJ09yJztcbmV4cG9ydCBjb25zdCBWaXNpYmlsaXR5Q29uZGl0aW9uX0VxdWFsID0gJ0VxdWFsJztcbmV4cG9ydCBjb25zdCBWaXNpYmlsaXR5Q29uZGl0aW9uX05vdEVxdWFsID0gJ05vdEVxdWFsJztcbmV4cG9ydCBjb25zdCBWaXNpYmlsaXR5X1Zpc2libGUgPSAnVmlzaWJsZSc7XG5leHBvcnQgY29uc3QgTWFpblF1ZXN0aW9uQ2xhc3NUeXBlID0gJ01haW5RdWVzdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXN0aW9uc1NldCB7XG5cbiAgICBjb25zdHJ1Y3RvcihxdWVzdGlvbnMsIGFuc3dlcnMgPSBbXSkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHF1ZXN0aW9ucztcbiAgICAgICAgdGhpcy5vcmlnaW5hbEFuc3dlcnMgPSBhbnN3ZXJzXG4gICAgICAgIHRoaXMuYW5zd2VycyA9IFtdO1xuICAgICAgICAvLyBtYXAgYW5zd2VycyB0byBhc3NvY2lhdGUgYXJyYXlcbiAgICAgICAgZm9yIChsZXQgYSBvZiB0aGlzLm9yaWdpbmFsQW5zd2VycylcbiAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1thLnF1ZXN0aW9uX2lkXSA9IGE7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeU5hbWUgPSB7fVxuICAgICAgICB0aGlzLnF1ZXN0aW9uQnlJZCA9IHt9XG4gICAgICAgIC8vIGFzc29jaWF0aXZlIGFycmF5ICggcnVsZSBpZCAsIHJ1bGUpO1xuICAgICAgICB0aGlzLnJ1bGVzID0ge307XG4gICAgICAgIHRoaXMuX3BhcnNlUXVlc3Rpb25zKCk7XG4gICAgfVxuXG4gICAgX3BhcnNlUXVlc3Rpb24gPSAocSkgPT4ge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQnlOYW1lW3EubmFtZV0gPSBxO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQnlJZFtwYXJzZUludChxLmlkKV0gPSBxO1xuICAgICAgICBpZihxLmhhc093blByb3BlcnR5KCdzdWJfcXVlc3Rpb25fcnVsZXMnKSlcbiAgICAgICAgICAgIGZvciAobGV0IHIgb2YgcS5zdWJfcXVlc3Rpb25fcnVsZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bGVzW3BhcnNlSW50KHIuaWQpXSA9IHI7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyc2VRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgfVxuXG4gICAgX3BhcnNlUXVlc3Rpb25zID0gKCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBxIG9mIHRoaXMucXVlc3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJzZVF1ZXN0aW9uKHEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2FsbG93c1ZhbHVlcyA9IChxKSA9PiB7XG4gICAgICAgIHJldHVybiBBbGxvd2VkTXVsdGlwbGVWYWx1ZVF1ZXN0aW9uVHlwZS5pbmNsdWRlcyhxLnR5cGUpO1xuICAgIH1cblxuICAgIF9hbGxvd3NWYWx1ZSA9IChxLCBhbnN3ZXIpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gYW5zd2VyLnZhbHVlLnNwbGl0KCcsJykubWFwKHYgPT4gcGFyc2VJbnQodikpO1xuICAgICAgICBmb3IgKGxldCBhdiBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFxLnZhbHVlcy5tYXAoZSA9PiBlLmlkKS5pbmNsdWRlcyhhdikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIF9nZXRBbnN3ZXJGb3IgPSAocSkgPT4ge1xuICAgICAgICBsZXQgaWQgPSBOdW1iZXIuaXNJbnRlZ2VyKHEpID8gcSA6IHEuaWQ7XG4gICAgICAgIGxldCBhID0gdGhpcy5hbnN3ZXJzW2lkXSB8fCBudWxsO1xuICAgICAgICByZXR1cm4gYSA/IGEgOiBudWxsO1xuICAgIH1cblxuICAgIF9oYXNWYWx1ZSA9IChhbnN3ZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGFuc3dlci52YWx1ZSAhPT0gJyc7XG4gICAgfVxuXG4gICAgX2Fuc3dlckNvbnRhaW5zID0gKGFuc3dlciwgdmFsKSA9PiB7XG4gICAgICAgIHJldHVybiBhbnN3ZXIudmFsdWUuc3BsaXQoJywnKS5pbmNsdWRlcyh2YWwpO1xuICAgIH1cblxuICAgIF9pc1N1YlF1ZXN0aW9uVmlzaWJsZSA9IChydWxlKSA9PiB7XG4gICAgICAgIGxldCBpbml0aWFsQ29uZGl0aW9uID0gcnVsZS5hbnN3ZXJfdmFsdWVzX29wZXJhdG9yID09PSBBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIGNvbnN0IHBhcmVudFF1ZXN0aW9uQW5zd2VyID0gdGhpcy5fZ2V0QW5zd2VyRm9yKHJ1bGUucGFyZW50X3F1ZXN0aW9uX2lkKTtcbiAgICAgICAgaWYgKCFwYXJlbnRRdWVzdGlvbkFuc3dlcikge1xuICAgICAgICAgICAgaW5pdGlhbENvbmRpdGlvbiA9IHJ1bGUudmlzaWJpbGl0eV9jb25kaXRpb24gPT09IFZpc2liaWxpdHlDb25kaXRpb25fRXF1YWwgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHJ1bGUudmlzaWJpbGl0eV9jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjYXNlIFZpc2liaWxpdHlDb25kaXRpb25fRXF1YWw6IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYW5zd2VyVmFsdWUgb2YgcnVsZS5hbnN3ZXJfdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5hbnN3ZXJfdmFsdWVzX29wZXJhdG9yID09PSBBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb24gJiYgdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiB8fCB0aGlzLl9hbnN3ZXJDb250YWlucyhwYXJlbnRRdWVzdGlvbkFuc3dlciwgYW5zd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFZpc2liaWxpdHlDb25kaXRpb25fTm90RXF1YWw6IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYW5zd2VyVmFsdWUgb2YgcnVsZS5hbnN3ZXJfdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5hbnN3ZXJfdmFsdWVzX29wZXJhdG9yID09PSBBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb24gJiYgIXRoaXMuX2Fuc3dlckNvbnRhaW5zKHBhcmVudFF1ZXN0aW9uQW5zd2VyLCBhbnN3ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb24gfHwgIXRoaXMuX2Fuc3dlckNvbnRhaW5zKHBhcmVudFF1ZXN0aW9uQW5zd2VyLCBhbnN3ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmFsIHZpc2liaWxpdHkgY2hlY2tcbiAgICAgICAgaWYgKHJ1bGUudmlzaWJpbGl0eSA9PT0gVmlzaWJpbGl0eV9WaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5pdGlhbENvbmRpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3QgdmlzaWJsZVxuICAgICAgICByZXR1cm4gIWluaXRpYWxDb25kaXRpb247XG4gICAgfVxuXG4gICAgX2lzQW5zd2VyZWQgPSAocSkgPT4ge1xuICAgICAgICBjb25zdCBhbnN3ZXIgPSB0aGlzLl9nZXRBbnN3ZXJGb3IocSk7XG5cbiAgICAgICAgaWYgKHEuY2xhc3MgPT09IE1haW5RdWVzdGlvbkNsYXNzVHlwZSkge1xuICAgICAgICAgICAgaWYgKCFxLm1hbmRhdG9yeSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBpZiAoIWFuc3dlcikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9oYXNWYWx1ZShhbnN3ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5fYWxsb3dzVmFsdWVzKHEpICYmICF0aGlzLl9hbGxvd3NWYWx1ZShxLCBhbnN3ZXIpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgcGFyZW50IHJ1bGVzIC4uLlxuICAgICAgICBmb3IgKGxldCBydWxlSWQgb2YgcS5wYXJlbnRfcnVsZXMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5faXNTdWJRdWVzdGlvblZpc2libGUodGhpcy5ydWxlc1tydWxlSWRdKSkgLy8gaWYgcXVlc3Rpb24gaXMgbm90IHZpc2libGUgc2tpcCBpdFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFxLm1hbmRhdG9yeSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBpZiAoIWFuc3dlcikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9oYXNWYWx1ZShhbnN3ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5fYWxsb3dzVmFsdWVzKHEpICYmICF0aGlzLl9hbGxvd3NWYWx1ZShxLCBhbnN3ZXIpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgX2NoZWNrUXVlc3Rpb24gPSAocSkgPT4ge1xuICAgICAgICBsZXQgcmVzID0gdGhpcy5faXNBbnN3ZXJlZChxKTtcbiAgICAgICAgaWYocS5oYXNPd25Qcm9wZXJ0eSgnc3ViX3F1ZXN0aW9uX3J1bGVzJykpXG4gICAgICAgICAgICBmb3IgKGxldCBydWxlIG9mIHEuc3ViX3F1ZXN0aW9uX3J1bGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgcmVjdXJzaXZlIGFsbCB0aGUgdHJlZSB0aWxsIGxlYXZlcyAuLi5cbiAgICAgICAgICAgICAgICByZXMgPSByZXMgJiYgdGhpcy5fY2hlY2tRdWVzdGlvbihydWxlLnN1Yl9xdWVzdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyID0gKHF1ZXN0aW9uKSA9PiB7XG4gICAgICAgIGxldCByZXMgPSB7fTtcbiAgICAgICAgbGV0IHVzZXJBbnN3ZXIgPSB0aGlzLm9yaWdpbmFsQW5zd2Vycy5maW5kKGEgPT4gYS5xdWVzdGlvbl9pZCA9PT0gcXVlc3Rpb24uaWQpPy52YWx1ZTtcblxuICAgICAgICBpZih1c2VyQW5zd2VyKSB7XG4gICAgICAgICAgICBpZiAocXVlc3Rpb24udHlwZSA9PT0gQ2hlY2tCb3hRdWVzdGlvblR5cGUpIHVzZXJBbnN3ZXIgPSB1c2VyQW5zd2VyID09PSAnZmFsc2UnID8gZmFsc2UgOiAhIXVzZXJBbnN3ZXI7XG4gICAgICAgICAgICAvL2lmIChxdWVzdGlvbi50eXBlID09PSBSYWRpb0J1dHRvbkxpc3RRdWVzdGlvblR5cGUgfHwgcXVlc3Rpb24udHlwZSA9PT0gQ29tYm9Cb3hRdWVzdGlvblR5cGUpIHVzZXJBbnN3ZXIgPSB1c2VyQW5zd2VyO1xuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLnR5cGUgPT09IENoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSkgdXNlckFuc3dlciA9IHVzZXJBbnN3ZXIuc3BsaXQoJywnKS5tYXAoYW5zVmFsID0+IGFuc1ZhbCkgfHwgW107XG4gICAgICAgIH1cblxuICAgICAgICByZXNbcXVlc3Rpb24ubmFtZV0gPSAgdXNlckFuc3dlciB8fCAnJztcbiAgICAgICAgaWYocXVlc3Rpb24uaGFzT3duUHJvcGVydHkoJ3N1Yl9xdWVzdGlvbl9ydWxlcycpKVxuICAgICAgICAgICAgZm9yIChsZXQgcnVsZSBvZiBxdWVzdGlvbi5zdWJfcXVlc3Rpb25fcnVsZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayByZWN1cnNpdmUgYWxsIHRoZSB0cmVlIHRpbGwgbGVhdmVzIC4uLlxuICAgICAgICAgICAgICAgIGxldCByZXMxID0gdGhpcy5fZm9ybWF0UXVlc3Rpb25BbnN3ZXIocnVsZS5zdWJfcXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgIHJlcyA9IHsuLi5yZXMsIC4uLnJlczF9O1xuICAgICAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZvcm1hdEFuc3dlcnMgPSAoKSA9PiB7XG4gICAgICAgIGxldCByZXMgPSB7fVxuICAgICAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKHEgPT4ge1xuICAgICAgICAgICAgbGV0IHJlczEgPSB0aGlzLl9mb3JtYXRRdWVzdGlvbkFuc3dlcihxKTtcbiAgICAgICAgICAgIHJlcyA9IHsuLi5yZXMsLi4ucmVzMX07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGNvbXBsZXRlZCA9ICgpID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IHEgb2YgdGhpcy5xdWVzdGlvbnMpIHtcbiAgICAgICAgICAgIHJlcyA9IHJlcyAmJiB0aGlzLl9jaGVja1F1ZXN0aW9uKHEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZ2V0UXVlc3Rpb25CeU5hbWUgPSAobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJ5TmFtZVtuYW1lXSB8fCBudWxsO1xuICAgIH1cblxuICAgIGdldFF1ZXN0aW9uQnlJZCA9IChpZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJ5SWRbcGFyc2VJbnQoaWQpXSB8fCBudWxsO1xuICAgIH1cbn0iXSwic291cmNlUm9vdCI6IiJ9
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("openstack-uicore-foundation",[],t):"object"==typeof exports?exports["openstack-uicore-foundation"]=t():e["openstack-uicore-foundation"]=t()}(this,(function(){return function(e){var t={};function n(s){if(t[s])return t[s].exports;var i=t[s]={i:s,l:!1,exports:{}};return e[s].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(s,i,function(t){return e[t]}.bind(null,i));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=26)}({26:function(e,t,n){"use strict";function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,s)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.r(t),n.d(t,"CheckBoxQuestionType",(function(){return o})),n.d(t,"ComboBoxQuestionType",(function(){return u})),n.d(t,"CheckBoxListQuestionType",(function(){return a})),n.d(t,"RadioButtonListQuestionType",(function(){return l})),n.d(t,"AllowedMultipleValueQuestionType",(function(){return f})),n.d(t,"AnswerValuesOperator_And",(function(){return c})),n.d(t,"AnswerValuesOperator_Or",(function(){return p})),n.d(t,"VisibilityCondition_Equal",(function(){return h})),n.d(t,"VisibilityCondition_NotEqual",(function(){return d})),n.d(t,"Visibility_Visible",(function(){return _})),n.d(t,"MainQuestionClassType",(function(){return b})),n.d(t,"default",(function(){return y}));const o="CheckBox",u="ComboBox",a="CheckBoxList",l="RadioButtonList",f=[u,a,l],c="And",p="Or",h="Equal",d="NotEqual",_="Visible",b="MainQuestion";class y{constructor(e,t=[]){r(this,"_parseQuestion",e=>{if(this.questionByName[e.name]=e,this.questionById[parseInt(e.id)]=e,e.hasOwnProperty("sub_question_rules"))for(let t of e.sub_question_rules)this.rules[parseInt(t.id)]=t,this._parseQuestion(t.sub_question)}),r(this,"_parseQuestions",()=>{for(let e of this.questions)this._parseQuestion(e)}),r(this,"_allowsValues",e=>f.includes(e.type)),r(this,"_allowsValue",(e,t)=>{let n=t.value.split(",").map(e=>parseInt(e));for(let t of n)if(!e.values.map(e=>e.id).includes(t))return!1;return!0}),r(this,"_getAnswerFor",e=>{let t=Number.isInteger(e)?e:e.id,n=this.answers[t]||null;return n||null}),r(this,"_hasValue",e=>""!==e.value),r(this,"_answerContains",(e,t)=>e.value.split(",").includes(t)),r(this,"_isSubQuestionVisible",e=>{let t=e.answer_values_operator===c;const n=this._getAnswerFor(e.parent_question_id);if(n)switch(e.visibility_condition){case h:for(let s of e.answer_values)t=e.answer_values_operator===c?t&&this._answerContains(n,s):t||this._answerContains(n,s);break;case d:for(let s of e.answer_values)t=e.answer_values_operator===c?t&&!this._answerContains(n,s):t||!this._answerContains(n,s)}else t=e.visibility_condition!==h;return e.visibility===_?t:!t}),r(this,"_isAnswered",e=>{const t=this._getAnswerFor(e);if(e.class===b)return!e.mandatory||!!t&&(!!this._hasValue(t)&&!(this._allowsValues(e)&&!this._allowsValue(e,t)));for(let n of e.parent_rules)if(this._isSubQuestionVisible(this.rules[n]))return!e.mandatory||!!t&&(!!this._hasValue(t)&&!(this._allowsValues(e)&&!this._allowsValue(e,t)));return!0}),r(this,"_checkQuestion",e=>{let t=this._isAnswered(e);if(e.hasOwnProperty("sub_question_rules"))for(let n of e.sub_question_rules)t=t&&this._checkQuestion(n.sub_question);return t}),r(this,"_formatQuestionAnswer",e=>{var t;let n={},s=null===(t=this.originalAnswers.find(t=>t.question_id===e.id))||void 0===t?void 0:t.value;if(s&&(e.type===o&&(s="false"!==s&&!!s),e.type!==l&&e.type!==u||(s=parseInt(s)),e.type===a&&(s=s.split(",").map(e=>parseInt(e))||[])),n[e.name]=s||"",e.type===a&&""===n[e.name]&&(n[e.name]=[]),e.hasOwnProperty("sub_question_rules"))for(let t of e.sub_question_rules){let e=this._formatQuestionAnswer(t.sub_question);n=i(i({},n),e)}return n}),r(this,"formatAnswers",()=>{let e={};return this.questions.forEach(t=>{let n=this._formatQuestionAnswer(t);e=i(i({},e),n)}),e}),r(this,"completed",()=>{let e=!0;for(let t of this.questions)e=e&&this._checkQuestion(t);return e}),r(this,"getQuestionByName",e=>this.questionByName[e]||null),r(this,"getQuestionById",e=>this.questionById[parseInt(e)]||null),this.questions=e,this.originalAnswers=t,this.answers=[];for(let e of this.originalAnswers)this.answers[e.question_id]=e;this.questionByName={},this.questionById={},this.rules={},this._parseQuestions()}}}})}));
|
package/lib.zip
ADDED
|
Binary file
|