custom-metrosurvey-widgets
Version:
Custom widgets for the SurveyJS library
287 lines (274 loc) • 24.4 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/icheck", [], factory);
else if(typeof exports === 'object')
exports["widgets/icheck"] = factory();
else
root["widgets/icheck"] = factory();
})(window, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "./src/icheck.js");
/******/ })
/************************************************************************/
/******/ ({
/***/ "./src/icheck.js":
/*!***********************!*\
!*** ./src/icheck.js ***!
\***********************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
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.JsonObject.metaData.addProperty("radiogroup", {
name: "radioClass",
category: "general",
});
Survey.JsonObject.metaData.addProperty("checkbox", {
name: "checkboxClass",
category: "general",
});
Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, "type");
}
if (typeof Survey !== "undefined") {
init(Survey, window.$);
}
/* harmony default export */ __webpack_exports__["default"] = (init);
/***/ })
/******/ });
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9zcmMvaWNoZWNrLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO1FDVkE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlLG1FQUFJLEVBQUMiLCJmaWxlIjoid2lkZ2V0cy9pY2hlY2suanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIndpZGdldHMvaWNoZWNrXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIndpZGdldHMvaWNoZWNrXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIndpZGdldHMvaWNoZWNrXCJdID0gZmFjdG9yeSgpO1xufSkod2luZG93LCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9pY2hlY2suanNcIik7XG4iLCJmdW5jdGlvbiBlc2NWYWx1ZSh2YWwpIHtcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gKHZhbCB8fCBcIlwiKS5yZXBsYWNlKC8oWyddKS9nLCBcIlxcXFwkMVwiKTtcbiAgfVxuICByZXR1cm4gdmFsO1xufVxuXG5mdW5jdGlvbiBpbml0KFN1cnZleSwgJCkge1xuICAkID0gJCB8fCB3aW5kb3cuJDtcbiAgdmFyIHdpZGdldCA9IHtcbiAgICBjbGFzc05hbWU6IFwiaXJhZGlvX3NxdWFyZS1ibHVlXCIsXG4gICAgY2hlY2tib3hDbGFzczogXCJpcmFkaW9fc3F1YXJlLWJsdWVcIixcbiAgICByYWRpb0NsYXNzOiBcImlyYWRpb19zcXVhcmUtYmx1ZVwiLFxuICAgIG5hbWU6IFwiaWNoZWNrXCIsXG4gICAgd2lkZ2V0SXNMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgJCA9PSBcImZ1bmN0aW9uXCIgJiYgISEkLmZuLmlDaGVjaztcbiAgICB9LFxuICAgIGlzRml0OiBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgIHZhciB0ID0gcXVlc3Rpb24uZ2V0VHlwZSgpO1xuICAgICAgcmV0dXJuIHQgPT09IFwicmFkaW9ncm91cFwiIHx8IHQgPT09IFwiY2hlY2tib3hcIiB8fCB0ID09PSBcIm1hdHJpeFwiO1xuICAgIH0sXG4gICAgaXNEZWZhdWx0UmVuZGVyOiB0cnVlLFxuICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICB2YXIgcm9vdFdpZGdldCA9IHRoaXM7XG4gICAgICB2YXIgJGVsID0gJChlbCk7XG5cbiAgICAgICRlbC5maW5kKFwiLnN2LWl0ZW1fX2RlY29yYXRvclwiKS5oaWRlKCk7XG5cbiAgICAgICRlbC5maW5kKFwiaW5wdXRcIikuZGF0YSh7XG4gICAgICAgIGlDaGVjazogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICBmdW5jdGlvbiBnZXRJbmRleEJ5VmFsdWUoYXJyLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIC0xO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChhcnJbaV0gPT0gdmFsdWUpIHJldHVybiBpO1xuICAgICAgICAgIGlmICghIWFycltpXSAmJiBhcnJbaV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IHZhbHVlKSByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICB2YXIgZnJvemVVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgdmFyIG1ha2VDaG9pY2VzSUNoZWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5wdXRzID0gJGVsLmZpbmQoXCJpbnB1dFwiKTtcbiAgICAgICAgaW5wdXRzLmlDaGVjayh7XG4gICAgICAgICAgY2hlY2tib3hDbGFzczpcbiAgICAgICAgICAgIHF1ZXN0aW9uLmNoZWNrYm94Q2xhc3MgfHxcbiAgICAgICAgICAgIHJvb3RXaWRnZXQuY2hlY2tib3hDbGFzcyB8fFxuICAgICAgICAgICAgcm9vdFdpZGdldC5jbGFzc05hbWUsXG4gICAgICAgICAgcmFkaW9DbGFzczpcbiAgICAgICAgICAgIHF1ZXN0aW9uLnJhZGlvQ2xhc3MgfHxcbiAgICAgICAgICAgIHJvb3RXaWRnZXQucmFkaW9DbGFzcyB8fFxuICAgICAgICAgICAgcm9vdFdpZGdldC5jbGFzc05hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICBpbnB1dHMub24oXCJpZkNoZWNrZWRcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKGZyb3plVXBkYXRpbmcpIHJldHVybjtcbiAgICAgICAgICBpZiAocXVlc3Rpb24uZ2V0VHlwZSgpID09PSBcIm1hdHJpeFwiKSB7XG4gICAgICAgICAgICBxdWVzdGlvbi5nZW5lcmF0ZWRWaXNpYmxlUm93cy5mb3JFYWNoKGZ1bmN0aW9uIChyb3csIGluZGV4LCByb3dzKSB7XG4gICAgICAgICAgICAgIGlmIChyb3cuZnVsbE5hbWUgPT09IGV2ZW50LnRhcmdldC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgcm93LnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJjaGVja2JveFwiKSB7XG4gICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBxdWVzdGlvbi52YWx1ZSB8fCBbXTtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlWYWx1ZShvbGRWYWx1ZSwgZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgcXVlc3Rpb24udmFsdWUgPSBvbGRWYWx1ZS5jb25jYXQoW2V2ZW50LnRhcmdldC52YWx1ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlucHV0cy5vbihcImlmVW5jaGVja2VkXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGlmIChmcm96ZVVwZGF0aW5nKSByZXR1cm47XG4gICAgICAgICAgaWYgKHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJjaGVja2JveFwiKSB7XG4gICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSAocXVlc3Rpb24udmFsdWUgfHwgW10pLnNsaWNlKCk7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5VmFsdWUob2xkVmFsdWUsIGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICBvbGRWYWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IG9sZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgZnVuY3Rpb24gdW5jaGVja0ljaGVjayhjRWwpIHtcbiAgICAgICAgY0VsLmlDaGVjayhcInVuY2hlY2tcIik7XG4gICAgICAgIGNFbFswXS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJjaGVja2VkXCIpO1xuICAgICAgfVxuICAgICAgdmFyIHNlbGVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZnJvemVVcGRhdGluZyA9IHRydWU7XG4gICAgICAgIGlmIChxdWVzdGlvbi5nZXRUeXBlKCkgIT09IFwibWF0cml4XCIpIHtcbiAgICAgICAgICB2YXIgdmFsdWVzID0gcXVlc3Rpb24udmFsdWU7XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IFt2YWx1ZXNdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocXVlc3Rpb24uZ2V0VHlwZSgpID09IFwiY2hlY2tib3hcIikge1xuICAgICAgICAgICAgdmFyIHFWYWx1ZSA9IHF1ZXN0aW9uLnZhbHVlO1xuICAgICAgICAgICAgcXVlc3Rpb24udmlzaWJsZUNob2ljZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICB2YXIgaW5FbCA9ICRlbC5maW5kKFxuICAgICAgICAgICAgICAgIFwiaW5wdXRbdmFsdWU9J1wiICsgZXNjVmFsdWUoaXRlbS52YWx1ZSkgKyBcIiddXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKCFpbkVsKSByZXR1cm47XG4gICAgICAgICAgICAgIHZhciBpc0NoZWNrZWQgPSBnZXRJbmRleEJ5VmFsdWUocVZhbHVlLCBpdGVtLnZhbHVlKSA+IC0xO1xuICAgICAgICAgICAgICBpZiAoaXNDaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgaW5FbC5pQ2hlY2soXCJjaGVja1wiKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgY0VsID0gaW5FbFswXTtcbiAgICAgICAgICAgICAgICB2YXIgd2FzQ2hlY2tlZCA9ICEhY0VsW1wiY2hlY2tlZFwiXTtcbiAgICAgICAgICAgICAgICBpZiAod2FzQ2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgaW5FbC5yZW1vdmVBdHRyKFwiY2hlY2tlZFwiKTtcbiAgICAgICAgICAgICAgICAgIGlmICghaW5FbC5wYXJlbnQoKS5oYXNDbGFzcyhcImNoZWNrZWRcIikpXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgIHVuY2hlY2tJY2hlY2soaW5FbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgZWxzZSB1bmNoZWNrSWNoZWNrKGluRWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAkZWxcbiAgICAgICAgICAgICAgICAuZmluZChcImlucHV0W3ZhbHVlPSdcIiArIGVzY1ZhbHVlKHZhbHVlKSArIFwiJ11cIilcbiAgICAgICAgICAgICAgICAuaUNoZWNrKFwiY2hlY2tcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcXVlc3Rpb24uZ2VuZXJhdGVkVmlzaWJsZVJvd3MuZm9yRWFjaChmdW5jdGlvbiAocm93LCBpbmRleCwgcm93cykge1xuICAgICAgICAgICAgaWYgKHJvdy52YWx1ZSkge1xuICAgICAgICAgICAgICAkKGVsKVxuICAgICAgICAgICAgICAgIC5maW5kKFxuICAgICAgICAgICAgICAgICAgXCJpbnB1dFtuYW1lPSdcIiArXG4gICAgICAgICAgICAgICAgICAgIHJvdy5mdWxsTmFtZSArXG4gICAgICAgICAgICAgICAgICAgIFwiJ11bdmFsdWU9J1wiICtcbiAgICAgICAgICAgICAgICAgICAgZXNjVmFsdWUocm93LnZhbHVlKSArXG4gICAgICAgICAgICAgICAgICAgIFwiJ11cIlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuaUNoZWNrKFwiY2hlY2tcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnJvemVVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgfTtcbiAgICAgIG1ha2VDaG9pY2VzSUNoZWNrKCk7XG5cbiAgICAgIHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBtYWtlQ2hvaWNlc0lDaGVjaygpO1xuICAgICAgICAkZWwuZmluZChcIi5zdi1pdGVtX19kZWNvcmF0b3JcIikuaGlkZSgpO1xuICAgICAgfTtcbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gc2VsZWN0O1xuICAgICAgc2VsZWN0KCk7XG4gICAgfSxcbiAgICB3aWxsVW5tb3VudDogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgdmFyICRlbCA9ICQoZWwpO1xuICAgICAgJGVsLmZpbmQoXCJpbnB1dFwiKS5pQ2hlY2soXCJkZXN0cm95XCIpO1xuICAgICAgcXVlc3Rpb24udmlzaWJsZUNob2ljZXNDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgIH0sXG4gIH07XG5cbiAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJyYWRpb2dyb3VwXCIsIHtcbiAgICBuYW1lOiBcInJhZGlvQ2xhc3NcIixcbiAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gIH0pO1xuICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0eShcImNoZWNrYm94XCIsIHtcbiAgICBuYW1lOiBcImNoZWNrYm94Q2xhc3NcIixcbiAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gIH0pO1xuICBTdXJ2ZXkuQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5JbnN0YW5jZS5hZGRDdXN0b21XaWRnZXQod2lkZ2V0LCBcInR5cGVcIik7XG59XG5cbmlmICh0eXBlb2YgU3VydmV5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIGluaXQoU3VydmV5LCB3aW5kb3cuJCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9