UNPKG

surveyjs-widgets

Version:

Custom widgets for the SurveyJS library

232 lines (223 loc) 19.1 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define("widgets/icheck", [], factory); else if(typeof exports === 'object') exports["widgets/icheck"] = factory(); else root["widgets/icheck"] = factory(); })(self, () => { return /******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ // The require scope /******/ var __webpack_require__ = {}; /******/ /************************************************************************/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; /*!***********************!*\ !*** ./src/icheck.js ***! \***********************/ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); function escValue(val) { if (typeof val === "string") { return (val || "").replace(/(['])/g, "\\$1"); } return val; } function init(Survey, $) { $ = $ || window.$; var widget = { className: "iradio_square-blue", checkboxClass: "iradio_square-blue", radioClass: "iradio_square-blue", name: "icheck", widgetIsLoaded: function () { return typeof $ == "function" && !!$.fn.iCheck; }, isFit: function (question) { var t = question.getType(); return t === "radiogroup" || t === "checkbox" || t === "matrix"; }, isDefaultRender: true, afterRender: function (question, el) { var rootWidget = this; var $el = $(el); $el.find(".sv-item__decorator").hide(); $el.find("input").data({ iCheck: undefined, }); function getIndexByValue(arr, value) { if (!Array.isArray(arr)) return -1; for (var i = 0; i < arr.length; i++) { if (arr[i] == value) return i; if (!!arr[i] && arr[i].toString().toLowerCase() == value) return i; } return -1; } var frozeUpdating = false; var makeChoicesICheck = function () { var inputs = $el.find("input"); inputs.iCheck({ checkboxClass: question.checkboxClass || rootWidget.checkboxClass || rootWidget.className, radioClass: question.radioClass || rootWidget.radioClass || rootWidget.className, }); inputs.on("ifChecked", function (event) { if (frozeUpdating) return; if (question.getType() === "matrix") { question.generatedVisibleRows.forEach(function (row, index, rows) { if (row.fullName === event.target.name) { row.value = event.target.value; } }); } else if (question.getType() === "checkbox") { var oldValue = question.value || []; var index = getIndexByValue(oldValue, event.target.value); if (index === -1) { question.value = oldValue.concat([event.target.value]); } } else { question.value = event.target.value; } }); inputs.on("ifUnchecked", function (event) { if (frozeUpdating) return; if (question.getType() === "checkbox") { var oldValue = (question.value || []).slice(); var index = getIndexByValue(oldValue, event.target.value); if (index >= 0) { oldValue.splice(index, 1); question.value = oldValue; } } }); }; function uncheckIcheck(cEl) { cEl.iCheck("uncheck"); cEl[0].parentElement.classList.remove("checked"); } var select = function () { frozeUpdating = true; if (question.getType() !== "matrix") { var values = question.value; if (!Array.isArray(values)) { values = [values]; } if (question.getType() == "checkbox") { var qValue = question.value; question.visibleChoices.forEach(function (item) { var inEl = $el.find( "input[value='" + escValue(item.value) + "']" ); if (!inEl) return; var isChecked = getIndexByValue(qValue, item.value) > -1; if (isChecked) { inEl.iCheck("check"); } else { var cEl = inEl[0]; var wasChecked = !!cEl["checked"]; if (wasChecked) { inEl.removeAttr("checked"); if (!inEl.parent().hasClass("checked")) setTimeout(function () { uncheckIcheck(inEl); }); else uncheckIcheck(inEl); } } }); } else { values.forEach(function (value) { $el .find("input[value='" + escValue(value) + "']") .iCheck("check"); }); } } else { question.generatedVisibleRows.forEach(function (row, index, rows) { if (row.value) { $(el) .find( "input[name='" + row.fullName + "'][value='" + escValue(row.value) + "']" ) .iCheck("check"); } }); } frozeUpdating = false; }; makeChoicesICheck(); question.visibleChoicesChangedCallback = function () { makeChoicesICheck(); $el.find(".sv-item__decorator").hide(); }; question.valueChangedCallback = select; select(); }, willUnmount: function (question, el) { var $el = $(el); $el.find("input").iCheck("destroy"); question.visibleChoicesChangedCallback = null; }, }; Survey.Serializer.addProperty("radiogroup", { name: "radioClass", category: "general", }); Survey.Serializer.addProperty("checkbox", { name: "checkboxClass", category: "general", }); Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, "type"); } if (typeof Survey !== "undefined") { init(Survey, window.jQuery); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (init); /******/ return __webpack_exports__; /******/ })() ; }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0cy9pY2hlY2suanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87O1VDVkE7VUFDQTs7Ozs7V0NEQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHlDQUF5Qyx3Q0FBd0M7V0FDakY7V0FDQTtXQUNBOzs7OztXQ1BBOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHVEQUF1RCxpQkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7Ozs7Ozs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0Esd0JBQXdCLGdCQUFnQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlFQUFlLElBQUksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL3N1cnZleWpzLXdpZGdldHMvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3N1cnZleWpzLXdpZGdldHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vc3VydmV5anMtd2lkZ2V0cy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vc3VydmV5anMtd2lkZ2V0cy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3N1cnZleWpzLXdpZGdldHMvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9zdXJ2ZXlqcy13aWRnZXRzLy4vc3JjL2ljaGVjay5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIndpZGdldHMvaWNoZWNrXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIndpZGdldHMvaWNoZWNrXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIndpZGdldHMvaWNoZWNrXCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgKCkgPT4ge1xucmV0dXJuICIsIi8vIFRoZSByZXF1aXJlIHNjb3BlXG52YXIgX193ZWJwYWNrX3JlcXVpcmVfXyA9IHt9O1xuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiZnVuY3Rpb24gZXNjVmFsdWUodmFsKSB7XG4gIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuICh2YWwgfHwgXCJcIikucmVwbGFjZSgvKFsnXSkvZywgXCJcXFxcJDFcIik7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gaW5pdChTdXJ2ZXksICQpIHtcbiAgJCA9ICQgfHwgd2luZG93LiQ7XG4gIHZhciB3aWRnZXQgPSB7XG4gICAgY2xhc3NOYW1lOiBcImlyYWRpb19zcXVhcmUtYmx1ZVwiLFxuICAgIGNoZWNrYm94Q2xhc3M6IFwiaXJhZGlvX3NxdWFyZS1ibHVlXCIsXG4gICAgcmFkaW9DbGFzczogXCJpcmFkaW9fc3F1YXJlLWJsdWVcIixcbiAgICBuYW1lOiBcImljaGVja1wiLFxuICAgIHdpZGdldElzTG9hZGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHlwZW9mICQgPT0gXCJmdW5jdGlvblwiICYmICEhJC5mbi5pQ2hlY2s7XG4gICAgfSxcbiAgICBpc0ZpdDogZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICB2YXIgdCA9IHF1ZXN0aW9uLmdldFR5cGUoKTtcbiAgICAgIHJldHVybiB0ID09PSBcInJhZGlvZ3JvdXBcIiB8fCB0ID09PSBcImNoZWNrYm94XCIgfHwgdCA9PT0gXCJtYXRyaXhcIjtcbiAgICB9LFxuICAgIGlzRGVmYXVsdFJlbmRlcjogdHJ1ZSxcbiAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgdmFyIHJvb3RXaWRnZXQgPSB0aGlzO1xuICAgICAgdmFyICRlbCA9ICQoZWwpO1xuXG4gICAgICAkZWwuZmluZChcIi5zdi1pdGVtX19kZWNvcmF0b3JcIikuaGlkZSgpO1xuXG4gICAgICAkZWwuZmluZChcImlucHV0XCIpLmRhdGEoe1xuICAgICAgICBpQ2hlY2s6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgZnVuY3Rpb24gZ2V0SW5kZXhCeVZhbHVlKGFyciwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHJldHVybiAtMTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJyW2ldID09IHZhbHVlKSByZXR1cm4gaTtcbiAgICAgICAgICBpZiAoISFhcnJbaV0gJiYgYXJyW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSB2YWx1ZSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGZyb3plVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgIHZhciBtYWtlQ2hvaWNlc0lDaGVjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlucHV0cyA9ICRlbC5maW5kKFwiaW5wdXRcIik7XG4gICAgICAgIGlucHV0cy5pQ2hlY2soe1xuICAgICAgICAgIGNoZWNrYm94Q2xhc3M6XG4gICAgICAgICAgICBxdWVzdGlvbi5jaGVja2JveENsYXNzIHx8XG4gICAgICAgICAgICByb290V2lkZ2V0LmNoZWNrYm94Q2xhc3MgfHxcbiAgICAgICAgICAgIHJvb3RXaWRnZXQuY2xhc3NOYW1lLFxuICAgICAgICAgIHJhZGlvQ2xhc3M6XG4gICAgICAgICAgICBxdWVzdGlvbi5yYWRpb0NsYXNzIHx8XG4gICAgICAgICAgICByb290V2lkZ2V0LnJhZGlvQ2xhc3MgfHxcbiAgICAgICAgICAgIHJvb3RXaWRnZXQuY2xhc3NOYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5wdXRzLm9uKFwiaWZDaGVja2VkXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGlmIChmcm96ZVVwZGF0aW5nKSByZXR1cm47XG4gICAgICAgICAgaWYgKHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJtYXRyaXhcIikge1xuICAgICAgICAgICAgcXVlc3Rpb24uZ2VuZXJhdGVkVmlzaWJsZVJvd3MuZm9yRWFjaChmdW5jdGlvbiAocm93LCBpbmRleCwgcm93cykge1xuICAgICAgICAgICAgICBpZiAocm93LmZ1bGxOYW1lID09PSBldmVudC50YXJnZXQubmFtZSkge1xuICAgICAgICAgICAgICAgIHJvdy52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChxdWVzdGlvbi5nZXRUeXBlKCkgPT09IFwiY2hlY2tib3hcIikge1xuICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gcXVlc3Rpb24udmFsdWUgfHwgW107XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5VmFsdWUob2xkVmFsdWUsIGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gb2xkVmFsdWUuY29uY2F0KFtldmVudC50YXJnZXQudmFsdWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpbnB1dHMub24oXCJpZlVuY2hlY2tlZFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoZnJvemVVcGRhdGluZykgcmV0dXJuO1xuICAgICAgICAgIGlmIChxdWVzdGlvbi5nZXRUeXBlKCkgPT09IFwiY2hlY2tib3hcIikge1xuICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gKHF1ZXN0aW9uLnZhbHVlIHx8IFtdKS5zbGljZSgpO1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeVZhbHVlKG9sZFZhbHVlLCBldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgb2xkVmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgcXVlc3Rpb24udmFsdWUgPSBvbGRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIHVuY2hlY2tJY2hlY2soY0VsKSB7XG4gICAgICAgIGNFbC5pQ2hlY2soXCJ1bmNoZWNrXCIpO1xuICAgICAgICBjRWxbMF0ucGFyZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiY2hlY2tlZFwiKTtcbiAgICAgIH1cbiAgICAgIHZhciBzZWxlY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZyb3plVXBkYXRpbmcgPSB0cnVlO1xuICAgICAgICBpZiAocXVlc3Rpb24uZ2V0VHlwZSgpICE9PSBcIm1hdHJpeFwiKSB7XG4gICAgICAgICAgdmFyIHZhbHVlcyA9IHF1ZXN0aW9uLnZhbHVlO1xuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSBbdmFsdWVzXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHF1ZXN0aW9uLmdldFR5cGUoKSA9PSBcImNoZWNrYm94XCIpIHtcbiAgICAgICAgICAgIHZhciBxVmFsdWUgPSBxdWVzdGlvbi52YWx1ZTtcbiAgICAgICAgICAgIHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgdmFyIGluRWwgPSAkZWwuZmluZChcbiAgICAgICAgICAgICAgICBcImlucHV0W3ZhbHVlPSdcIiArIGVzY1ZhbHVlKGl0ZW0udmFsdWUpICsgXCInXVwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmICghaW5FbCkgcmV0dXJuO1xuICAgICAgICAgICAgICB2YXIgaXNDaGVja2VkID0gZ2V0SW5kZXhCeVZhbHVlKHFWYWx1ZSwgaXRlbS52YWx1ZSkgPiAtMTtcbiAgICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGluRWwuaUNoZWNrKFwiY2hlY2tcIik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGNFbCA9IGluRWxbMF07XG4gICAgICAgICAgICAgICAgdmFyIHdhc0NoZWNrZWQgPSAhIWNFbFtcImNoZWNrZWRcIl07XG4gICAgICAgICAgICAgICAgaWYgKHdhc0NoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgIGluRWwucmVtb3ZlQXR0cihcImNoZWNrZWRcIik7XG4gICAgICAgICAgICAgICAgICBpZiAoIWluRWwucGFyZW50KCkuaGFzQ2xhc3MoXCJjaGVja2VkXCIpKVxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICB1bmNoZWNrSWNoZWNrKGluRWwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGVsc2UgdW5jaGVja0ljaGVjayhpbkVsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgJGVsXG4gICAgICAgICAgICAgICAgLmZpbmQoXCJpbnB1dFt2YWx1ZT0nXCIgKyBlc2NWYWx1ZSh2YWx1ZSkgKyBcIiddXCIpXG4gICAgICAgICAgICAgICAgLmlDaGVjayhcImNoZWNrXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1ZXN0aW9uLmdlbmVyYXRlZFZpc2libGVSb3dzLmZvckVhY2goZnVuY3Rpb24gKHJvdywgaW5kZXgsIHJvd3MpIHtcbiAgICAgICAgICAgIGlmIChyb3cudmFsdWUpIHtcbiAgICAgICAgICAgICAgJChlbClcbiAgICAgICAgICAgICAgICAuZmluZChcbiAgICAgICAgICAgICAgICAgIFwiaW5wdXRbbmFtZT0nXCIgK1xuICAgICAgICAgICAgICAgICAgICByb3cuZnVsbE5hbWUgK1xuICAgICAgICAgICAgICAgICAgICBcIiddW3ZhbHVlPSdcIiArXG4gICAgICAgICAgICAgICAgICAgIGVzY1ZhbHVlKHJvdy52YWx1ZSkgK1xuICAgICAgICAgICAgICAgICAgICBcIiddXCJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmlDaGVjayhcImNoZWNrXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZyb3plVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgIH07XG4gICAgICBtYWtlQ2hvaWNlc0lDaGVjaygpO1xuXG4gICAgICBxdWVzdGlvbi52aXNpYmxlQ2hvaWNlc0NoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbWFrZUNob2ljZXNJQ2hlY2soKTtcbiAgICAgICAgJGVsLmZpbmQoXCIuc3YtaXRlbV9fZGVjb3JhdG9yXCIpLmhpZGUoKTtcbiAgICAgIH07XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IHNlbGVjdDtcbiAgICAgIHNlbGVjdCgpO1xuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciAkZWwgPSAkKGVsKTtcbiAgICAgICRlbC5maW5kKFwiaW5wdXRcIikuaUNoZWNrKFwiZGVzdHJveVwiKTtcbiAgICAgIHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzQ2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB9LFxuICB9O1xuXG4gIFN1cnZleS5TZXJpYWxpemVyLmFkZFByb3BlcnR5KFwicmFkaW9ncm91cFwiLCB7XG4gICAgbmFtZTogXCJyYWRpb0NsYXNzXCIsXG4gICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICB9KTtcbiAgU3VydmV5LlNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoXCJjaGVja2JveFwiLCB7XG4gICAgbmFtZTogXCJjaGVja2JveENsYXNzXCIsXG4gICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICB9KTtcbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCwgXCJ0eXBlXCIpO1xufVxuXG5pZiAodHlwZW9mIFN1cnZleSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBpbml0KFN1cnZleSwgd2luZG93LmpRdWVyeSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=