surveyjs-widgets
Version:
Custom widgets for the SurveyJS library
263 lines (256 loc) • 22.6 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define("widgets/select2", [], factory);
else if(typeof exports === 'object')
exports["widgets/select2"] = factory();
else
root["widgets/select2"] = 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/select2.js ***!
\************************/
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
function init(Survey, $) {
$ = $ || window.$;
const componentName = "select2";
var widget = {
activatedBy: "property",
name: componentName,
widgetIsLoaded: function () {
return typeof $ == "function" && !!$.fn.select2;
},
isFit: function (question) {
if (widget.activatedBy == "property")
return (
question["renderAs"] === componentName &&
question.getType() === "dropdown"
);
if (widget.activatedBy == "type")
return question.getType() === "dropdown";
if (widget.activatedBy == "customtype")
return question.getType() === componentName;
return false;
},
activatedByChanged: function (activatedBy) {
if (!this.widgetIsLoaded()) return;
widget.activatedBy = activatedBy;
Survey.Serializer.removeProperty("dropdown", "renderAs");
if (activatedBy == "property") {
Survey.Serializer.addProperty("dropdown", {
name: "renderAs",
category: "general",
default: "default",
choices: [componentName, "default"],
});
Survey.Serializer.addProperty("dropdown", {
dependsOn: "renderAs",
category: "general",
name: "select2Config",
visibleIf: function (obj) {
return obj.renderAs == componentName;
},
});
}
if (activatedBy == "customtype") {
if(Survey.Serializer.findClass(componentName)) return;
Survey.Serializer.addClass(componentName, [], null, "dropdown");
let registerQuestion = Survey.ElementFactory.Instance.registerCustomQuestion;
if(!!registerQuestion) registerQuestion(componentName);
Survey.Serializer.addProperty(componentName, {
name: "select2Config",
category: "general",
default: null,
});
}
},
htmlTemplate:
"<div><select style='width: 100%;'></select><textarea></textarea></div>",
afterRender: function (question, el) {
var select2Config = question.select2Config;
var settings =
select2Config && typeof select2Config == "string"
? JSON.parse(select2Config)
: select2Config;
if (!settings) settings = {};
var $el = $(el).is("select") ? $(el) : $(el).find("select");
var $otherElement = $(el).find("textarea");
$otherElement.addClass(question.cssClasses.other);
$otherElement.bind("input propertychange", function () {
if (isSettingValue) return;
question.comment = $otherElement.val();
});
var updateComment = function () {
$otherElement.val(question.comment);
if (question.isOtherSelected) {
$otherElement.show();
} else {
$otherElement.hide();
}
};
var isSettingValue = false;
var updateValueHandler = function () {
if (isSettingValue) return;
isSettingValue = true;
if ($el.find('option[value="' + (question.value || "") + '"]').length) {
$el.val(question.value).trigger("change");
} else {
if (
question.value !== null &&
question.value !== undefined &&
!question.isOtherSelected
) {
var newOption = new Option(
question.value, //TODO if question value is object then need to improve
question.value,
true,
true
);
$el.append(newOption).trigger("change");
}
}
updateComment();
isSettingValue = false;
};
var updateChoices = function () {
$el.select2().empty();
if (!settings.placeholder && question.showOptionsCaption) {
settings.placeholder = question.optionsCaption;
settings.allowClear = true;
}
if (!settings.theme) {
settings.theme = "classic";
}
settings.disabled = question.isReadOnly;
if (settings.ajax) {
$el.select2(settings);
question.keepIncorrectValues = true;
} else {
var data = [];
if (!!settings.placeholder || question.showOptionsCaption) {
data.push({ id: "", text: "" });
}
settings.data = data.concat(
question.visibleChoices.map(function (choice) {
return {
id: choice.value,
text: choice.text,
};
})
);
question.clearIncorrectValues();
$el.select2(settings);
}
// fixed width accrording to https://stackoverflow.com/questions/45276778/select2-not-responsive-width-larger-than-container
if (!!el.querySelector(".select2")) {
el.querySelector(".select2").style.width = "100%";
}
if (!!el.nextElementSibling) {
el.nextElementSibling.style.marginBottom = "1px";
}
updateValueHandler();
};
$otherElement.prop("disabled", question.isReadOnly);
question.readOnlyChangedCallback = function () {
$el.prop("disabled", question.isReadOnly);
$otherElement.prop("disabled", question.isReadOnly);
};
question.registerFunctionOnPropertyValueChanged(
"visibleChoices",
function () {
updateChoices();
}
);
updateChoices();
$el.on("change", function (e) {
setTimeout(function () {
question.renderedValue = e.target.value;
updateComment();
}, 1);
});
$el.on("select2:select", function (e) {
setTimeout(function () {
question.renderedValue = e.target.value;
updateComment();
}, 1);
});
$el.on("select2:opening", function (e) {
if ($(this).data("unselecting")) {
$(this).removeData("unselecting");
e.preventDefault();
}
});
$el.on("select2:unselecting", function (e) {
$(this).data("unselecting", true);
setTimeout(function () {
question.renderedValue = null;
updateComment();
}, 1);
});
question.valueChangedCallback = updateValueHandler;
updateValueHandler();
},
willUnmount: function (question, el) {
question.readOnlyChangedCallback = null;
question.valueChangedCallback = null;
var $select2 = $(el).find("select");
if (!!$select2.data(componentName)) {
$select2
.off("select2:select")
.off("select2:unselecting")
.off("select2:opening")
.select2("destroy");
}
},
};
Survey.CustomWidgetCollection.Instance.addCustomWidget(widget);
}
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0cy9zZWxlY3QyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPOztVQ1ZBO1VBQ0E7Ozs7O1dDREE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx5Q0FBeUMsd0NBQXdDO1dBQ2pGO1dBQ0E7V0FDQTs7Ozs7V0NQQTs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSx1REFBdUQsaUJBQWlCO1dBQ3hFO1dBQ0EsZ0RBQWdELGFBQWE7V0FDN0Q7Ozs7Ozs7Ozs7OztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlFQUFlLElBQUksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL3N1cnZleWpzLXdpZGdldHMvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3N1cnZleWpzLXdpZGdldHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vc3VydmV5anMtd2lkZ2V0cy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vc3VydmV5anMtd2lkZ2V0cy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3N1cnZleWpzLXdpZGdldHMvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9zdXJ2ZXlqcy13aWRnZXRzLy4vc3JjL3NlbGVjdDIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJ3aWRnZXRzL3NlbGVjdDJcIiwgW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wid2lkZ2V0cy9zZWxlY3QyXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIndpZGdldHMvc2VsZWN0MlwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsICgpID0+IHtcbnJldHVybiAiLCIvLyBUaGUgcmVxdWlyZSBzY29wZVxudmFyIF9fd2VicGFja19yZXF1aXJlX18gPSB7fTtcblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImZ1bmN0aW9uIGluaXQoU3VydmV5LCAkKSB7XG4gICQgPSAkIHx8IHdpbmRvdy4kO1xuICBjb25zdCBjb21wb25lbnROYW1lID0gXCJzZWxlY3QyXCI7XG4gIHZhciB3aWRnZXQgPSB7XG4gICAgYWN0aXZhdGVkQnk6IFwicHJvcGVydHlcIixcbiAgICBuYW1lOiBjb21wb25lbnROYW1lLFxuICAgIHdpZGdldElzTG9hZGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHlwZW9mICQgPT0gXCJmdW5jdGlvblwiICYmICEhJC5mbi5zZWxlY3QyO1xuICAgIH0sXG4gICAgaXNGaXQ6IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgaWYgKHdpZGdldC5hY3RpdmF0ZWRCeSA9PSBcInByb3BlcnR5XCIpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcXVlc3Rpb25bXCJyZW5kZXJBc1wiXSA9PT0gY29tcG9uZW50TmFtZSAmJlxuICAgICAgICAgIHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJkcm9wZG93blwiXG4gICAgICAgICk7XG4gICAgICBpZiAod2lkZ2V0LmFjdGl2YXRlZEJ5ID09IFwidHlwZVwiKVxuICAgICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0VHlwZSgpID09PSBcImRyb3Bkb3duXCI7XG4gICAgICBpZiAod2lkZ2V0LmFjdGl2YXRlZEJ5ID09IFwiY3VzdG9tdHlwZVwiKVxuICAgICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0VHlwZSgpID09PSBjb21wb25lbnROYW1lO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgYWN0aXZhdGVkQnlDaGFuZ2VkOiBmdW5jdGlvbiAoYWN0aXZhdGVkQnkpIHtcbiAgICAgIGlmICghdGhpcy53aWRnZXRJc0xvYWRlZCgpKSByZXR1cm47XG4gICAgICB3aWRnZXQuYWN0aXZhdGVkQnkgPSBhY3RpdmF0ZWRCeTtcbiAgICAgIFN1cnZleS5TZXJpYWxpemVyLnJlbW92ZVByb3BlcnR5KFwiZHJvcGRvd25cIiwgXCJyZW5kZXJBc1wiKTtcbiAgICAgIGlmIChhY3RpdmF0ZWRCeSA9PSBcInByb3BlcnR5XCIpIHtcbiAgICAgICAgU3VydmV5LlNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoXCJkcm9wZG93blwiLCB7XG4gICAgICAgICAgbmFtZTogXCJyZW5kZXJBc1wiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgICAgICBjaG9pY2VzOiBbY29tcG9uZW50TmFtZSwgXCJkZWZhdWx0XCJdLFxuICAgICAgICB9KTtcbiAgICAgICAgU3VydmV5LlNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoXCJkcm9wZG93blwiLCB7XG4gICAgICAgICAgZGVwZW5kc09uOiBcInJlbmRlckFzXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICAgIG5hbWU6IFwic2VsZWN0MkNvbmZpZ1wiLFxuICAgICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5yZW5kZXJBcyA9PSBjb21wb25lbnROYW1lO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGFjdGl2YXRlZEJ5ID09IFwiY3VzdG9tdHlwZVwiKSB7XG4gICAgICAgIGlmKFN1cnZleS5TZXJpYWxpemVyLmZpbmRDbGFzcyhjb21wb25lbnROYW1lKSkgcmV0dXJuO1xuICAgICAgICBTdXJ2ZXkuU2VyaWFsaXplci5hZGRDbGFzcyhjb21wb25lbnROYW1lLCBbXSwgbnVsbCwgXCJkcm9wZG93blwiKTtcbiAgICAgICAgbGV0IHJlZ2lzdGVyUXVlc3Rpb24gPSBTdXJ2ZXkuRWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJDdXN0b21RdWVzdGlvbjtcbiAgICAgICAgaWYoISFyZWdpc3RlclF1ZXN0aW9uKSByZWdpc3RlclF1ZXN0aW9uKGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIFN1cnZleS5TZXJpYWxpemVyLmFkZFByb3BlcnR5KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgICAgICBuYW1lOiBcInNlbGVjdDJDb25maWdcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBodG1sVGVtcGxhdGU6XG4gICAgICBcIjxkaXY+PHNlbGVjdCBzdHlsZT0nd2lkdGg6IDEwMCU7Jz48L3NlbGVjdD48dGV4dGFyZWE+PC90ZXh0YXJlYT48L2Rpdj5cIixcbiAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgdmFyIHNlbGVjdDJDb25maWcgPSBxdWVzdGlvbi5zZWxlY3QyQ29uZmlnO1xuICAgICAgdmFyIHNldHRpbmdzID1cbiAgICAgICAgc2VsZWN0MkNvbmZpZyAmJiB0eXBlb2Ygc2VsZWN0MkNvbmZpZyA9PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyBKU09OLnBhcnNlKHNlbGVjdDJDb25maWcpXG4gICAgICAgICAgOiBzZWxlY3QyQ29uZmlnO1xuICAgICAgaWYgKCFzZXR0aW5ncykgc2V0dGluZ3MgPSB7fTtcbiAgICAgIHZhciAkZWwgPSAkKGVsKS5pcyhcInNlbGVjdFwiKSA/ICQoZWwpIDogJChlbCkuZmluZChcInNlbGVjdFwiKTtcbiAgICAgIHZhciAkb3RoZXJFbGVtZW50ID0gJChlbCkuZmluZChcInRleHRhcmVhXCIpO1xuICAgICAgJG90aGVyRWxlbWVudC5hZGRDbGFzcyhxdWVzdGlvbi5jc3NDbGFzc2VzLm90aGVyKTtcbiAgICAgICRvdGhlckVsZW1lbnQuYmluZChcImlucHV0IHByb3BlcnR5Y2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzU2V0dGluZ1ZhbHVlKSByZXR1cm47XG4gICAgICAgIHF1ZXN0aW9uLmNvbW1lbnQgPSAkb3RoZXJFbGVtZW50LnZhbCgpO1xuICAgICAgfSk7XG5cbiAgICAgIHZhciB1cGRhdGVDb21tZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAkb3RoZXJFbGVtZW50LnZhbChxdWVzdGlvbi5jb21tZW50KTtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCkge1xuICAgICAgICAgICRvdGhlckVsZW1lbnQuc2hvdygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRvdGhlckVsZW1lbnQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIGlzU2V0dGluZ1ZhbHVlID0gZmFsc2U7XG4gICAgICB2YXIgdXBkYXRlVmFsdWVIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNTZXR0aW5nVmFsdWUpIHJldHVybjtcbiAgICAgICAgaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xuICAgICAgICBpZiAoJGVsLmZpbmQoJ29wdGlvblt2YWx1ZT1cIicgKyAocXVlc3Rpb24udmFsdWUgfHwgXCJcIikgKyAnXCJdJykubGVuZ3RoKSB7XG4gICAgICAgICAgJGVsLnZhbChxdWVzdGlvbi52YWx1ZSkudHJpZ2dlcihcImNoYW5nZVwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBxdWVzdGlvbi52YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgcXVlc3Rpb24udmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgIXF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIG5ld09wdGlvbiA9IG5ldyBPcHRpb24oXG4gICAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlLCAvL1RPRE8gaWYgcXVlc3Rpb24gdmFsdWUgaXMgb2JqZWN0IHRoZW4gbmVlZCB0byBpbXByb3ZlXG4gICAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlLFxuICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgJGVsLmFwcGVuZChuZXdPcHRpb24pLnRyaWdnZXIoXCJjaGFuZ2VcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZUNvbW1lbnQoKTtcbiAgICAgICAgaXNTZXR0aW5nVmFsdWUgPSBmYWxzZTtcbiAgICAgIH07XG4gICAgICB2YXIgdXBkYXRlQ2hvaWNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJGVsLnNlbGVjdDIoKS5lbXB0eSgpO1xuICAgICAgICBpZiAoIXNldHRpbmdzLnBsYWNlaG9sZGVyICYmIHF1ZXN0aW9uLnNob3dPcHRpb25zQ2FwdGlvbikge1xuICAgICAgICAgIHNldHRpbmdzLnBsYWNlaG9sZGVyID0gcXVlc3Rpb24ub3B0aW9uc0NhcHRpb247XG4gICAgICAgICAgc2V0dGluZ3MuYWxsb3dDbGVhciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZXR0aW5ncy50aGVtZSkge1xuICAgICAgICAgIHNldHRpbmdzLnRoZW1lID0gXCJjbGFzc2ljXCI7XG4gICAgICAgIH1cbiAgICAgICAgc2V0dGluZ3MuZGlzYWJsZWQgPSBxdWVzdGlvbi5pc1JlYWRPbmx5O1xuICAgICAgICBpZiAoc2V0dGluZ3MuYWpheCkge1xuICAgICAgICAgICRlbC5zZWxlY3QyKHNldHRpbmdzKTtcbiAgICAgICAgICBxdWVzdGlvbi5rZWVwSW5jb3JyZWN0VmFsdWVzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IFtdO1xuICAgICAgICAgIGlmICghIXNldHRpbmdzLnBsYWNlaG9sZGVyIHx8IHF1ZXN0aW9uLnNob3dPcHRpb25zQ2FwdGlvbikge1xuICAgICAgICAgICAgZGF0YS5wdXNoKHsgaWQ6IFwiXCIsIHRleHQ6IFwiXCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldHRpbmdzLmRhdGEgPSBkYXRhLmNvbmNhdChcbiAgICAgICAgICAgIHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLm1hcChmdW5jdGlvbiAoY2hvaWNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWQ6IGNob2ljZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBjaG9pY2UudGV4dCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBxdWVzdGlvbi5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgICAgICAgICRlbC5zZWxlY3QyKHNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmaXhlZCB3aWR0aCBhY2Nyb3JkaW5nIHRvIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ1Mjc2Nzc4L3NlbGVjdDItbm90LXJlc3BvbnNpdmUtd2lkdGgtbGFyZ2VyLXRoYW4tY29udGFpbmVyXG4gICAgICAgIGlmICghIWVsLnF1ZXJ5U2VsZWN0b3IoXCIuc2VsZWN0MlwiKSkge1xuICAgICAgICAgIGVsLnF1ZXJ5U2VsZWN0b3IoXCIuc2VsZWN0MlwiKS5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIWVsLm5leHRFbGVtZW50U2libGluZykge1xuICAgICAgICAgIGVsLm5leHRFbGVtZW50U2libGluZy5zdHlsZS5tYXJnaW5Cb3R0b20gPSBcIjFweFwiO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVZhbHVlSGFuZGxlcigpO1xuICAgICAgfTtcblxuICAgICAgJG90aGVyRWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIiwgcXVlc3Rpb24uaXNSZWFkT25seSk7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJGVsLnByb3AoXCJkaXNhYmxlZFwiLCBxdWVzdGlvbi5pc1JlYWRPbmx5KTtcbiAgICAgICAgJG90aGVyRWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIiwgcXVlc3Rpb24uaXNSZWFkT25seSk7XG4gICAgICB9O1xuXG4gICAgICBxdWVzdGlvbi5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgICAgXCJ2aXNpYmxlQ2hvaWNlc1wiLFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXBkYXRlQ2hvaWNlcygpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgdXBkYXRlQ2hvaWNlcygpO1xuICAgICAgJGVsLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgICAgICB1cGRhdGVDb21tZW50KCk7XG4gICAgICAgIH0sIDEpO1xuICAgICAgfSk7XG4gICAgICAkZWwub24oXCJzZWxlY3QyOnNlbGVjdFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBxdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAgICAgdXBkYXRlQ29tbWVudCgpO1xuICAgICAgICB9LCAxKTtcbiAgICAgIH0pO1xuICAgICAgJGVsLm9uKFwic2VsZWN0MjpvcGVuaW5nXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmICgkKHRoaXMpLmRhdGEoXCJ1bnNlbGVjdGluZ1wiKSkge1xuICAgICAgICAgICQodGhpcykucmVtb3ZlRGF0YShcInVuc2VsZWN0aW5nXCIpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAkZWwub24oXCJzZWxlY3QyOnVuc2VsZWN0aW5nXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICQodGhpcykuZGF0YShcInVuc2VsZWN0aW5nXCIsIHRydWUpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBxdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gbnVsbDtcbiAgICAgICAgICB1cGRhdGVDb21tZW50KCk7XG4gICAgICAgIH0sIDEpO1xuICAgICAgfSk7XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IHVwZGF0ZVZhbHVlSGFuZGxlcjtcbiAgICAgIHVwZGF0ZVZhbHVlSGFuZGxlcigpO1xuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICAgIHZhciAkc2VsZWN0MiA9ICQoZWwpLmZpbmQoXCJzZWxlY3RcIik7XG4gICAgICBpZiAoISEkc2VsZWN0Mi5kYXRhKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgICRzZWxlY3QyXG4gICAgICAgICAgLm9mZihcInNlbGVjdDI6c2VsZWN0XCIpXG4gICAgICAgICAgLm9mZihcInNlbGVjdDI6dW5zZWxlY3RpbmdcIilcbiAgICAgICAgICAub2ZmKFwic2VsZWN0MjpvcGVuaW5nXCIpXG4gICAgICAgICAgLnNlbGVjdDIoXCJkZXN0cm95XCIpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCk7XG59XG5cbmlmICh0eXBlb2YgU3VydmV5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIGluaXQoU3VydmV5LCB3aW5kb3cualF1ZXJ5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==