surveyjs-widgets
Version:
Custom widgets for the SurveyJS library
201 lines (188 loc) • 17.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/ck-editor", [], factory);
else if(typeof exports === 'object')
exports["widgets/ck-editor"] = factory();
else
root["widgets/ck-editor"] = factory();
})(self, () => {
return /******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/svg-inline-loader/index.js!./src/images/editor.svg":
/*!*************************************************************************!*\
!*** ./node_modules/svg-inline-loader/index.js!./src/images/editor.svg ***!
\*************************************************************************/
/***/ ((module) => {
module.exports = "<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><g><polygon points=\"1,3 3,3 3,8 2,8 2,9 3,9 5,9 6,9 6,8 5,8 5,3 7,3 7,4 8,4 8,1 7,1 0,1 0,2 0,3 0,4 1,4 \"></polygon><rect x=\"10\" y=\"5\" width=\"6\" height=\"1\"></rect><rect x=\"10\" y=\"8\" width=\"6\" height=\"1\"></rect><rect y=\"11\" width=\"16\" height=\"1\"></rect><rect y=\"14\" width=\"16\" height=\"1\"></rect></g></svg>"
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* 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__ = {};
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
(() => {
"use strict";
/*!**************************!*\
!*** ./src/ck-editor.js ***!
\**************************/
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
function init(Survey) {
const iconId = "icon-editor";
const componentName = "editor";
Survey.SvgRegistry && Survey.SvgRegistry.registerIconFromSvg(iconId, __webpack_require__(/*! svg-inline-loader!./images/editor.svg */ "./node_modules/svg-inline-loader/index.js!./src/images/editor.svg"), "");
var widget = {
name: componentName,
title: "Editor",
iconName: iconId,
widgetIsLoaded: function () {
return typeof CKEDITOR != "undefined";
},
isFit: function (question) {
return question.getType() === componentName;
},
htmlTemplate:
"<textarea rows='10' cols='80' style: {width:'100%'}></textarea>",
activatedByChanged: function (activatedBy) {
Survey.Serializer.addClass(componentName, [], null, "empty");
let registerQuestion = Survey.ElementFactory.Instance.registerCustomQuestion;
if(!!registerQuestion) registerQuestion(componentName);
Survey.Serializer.addProperty(componentName, {
name: "height",
default: 300,
category: "general",
});
},
afterRender: function (question, el) {
var name = question.inputId;
CKEDITOR.editorConfig = function (config) {
config.language = "es";
config.height = question.height;
config.toolbarCanCollapse = true;
};
el.name = name;
if (CKEDITOR.instances[name]) {
CKEDITOR.instances[name].removeAllListeners();
CKEDITOR.remove(CKEDITOR.instances[name]);
}
var editor = CKEDITOR.replace(el);
CKEDITOR.instances[name].config.readOnly = question.isReadOnly;
var isValueChanging = false;
var updateValueHandler = function () {
if (isValueChanging || typeof question.value === "undefined") return;
editor.setData(question.value);
};
editor.on("change", function () {
isValueChanging = true;
question.value = editor.getData();
isValueChanging = false;
});
question.valueChangedCallback = updateValueHandler;
question.readOnlyChangedCallback = function () {
if (question.isReadOnly) {
editor.setReadOnly(true);
} else {
editor.setReadOnly(false);
}
};
updateValueHandler();
},
willUnmount: function (question, el) {
question.readOnlyChangedCallback = null;
CKEDITOR.instances[question.inputId].destroy(false);
},
pdfRender: function (survey, options) {
if (options.question.getType() === componentName) {
const loc = new Survey.LocalizableString(survey, true);
loc.text = options.question.value || options.question.defaultValue;
options.question["locHtml"] = loc;
if (
options.question.renderAs === "standard" ||
options.question.renderAs === "image"
) {
options.question["renderAs"] = options.question.renderAs;
} else options.question["renderAs"] = "auto";
const flatHtml = options.repository.create(
survey,
options.question,
options.controller,
"html"
);
return new Promise(function (resolve) {
flatHtml.generateFlats(options.point).then(function (htmlBricks) {
options.bricks = htmlBricks;
resolve();
});
});
}
},
};
Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, "customtype");
}
if (typeof Survey !== "undefined") {
init(Survey);
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (init);
})();
/******/ return __webpack_exports__;
/******/ })()
;
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0cy9jay1lZGl0b3IuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7OztBQ1ZBOzs7Ozs7VUNBQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3RCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHlDQUF5Qyx3Q0FBd0M7V0FDakY7V0FDQTtXQUNBOzs7OztXQ1BBOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHVEQUF1RCxpQkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7Ozs7Ozs7Ozs7O0FDTkE7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLG1CQUFPLENBQUMsZ0hBQXVDO0FBQ3RIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNkNBQTZDLGFBQWE7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxJQUFJLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zdXJ2ZXlqcy13aWRnZXRzL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9zdXJ2ZXlqcy13aWRnZXRzLy4vc3JjL2ltYWdlcy9lZGl0b3Iuc3ZnIiwid2VicGFjazovL3N1cnZleWpzLXdpZGdldHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vc3VydmV5anMtd2lkZ2V0cy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vc3VydmV5anMtd2lkZ2V0cy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3N1cnZleWpzLXdpZGdldHMvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9zdXJ2ZXlqcy13aWRnZXRzLy4vc3JjL2NrLWVkaXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIndpZGdldHMvY2stZWRpdG9yXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIndpZGdldHMvY2stZWRpdG9yXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIndpZGdldHMvY2stZWRpdG9yXCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgKCkgPT4ge1xucmV0dXJuICIsIm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48Zz48cG9seWdvbiBwb2ludHM9XFxcIjEsMyAzLDMgMyw4IDIsOCAyLDkgMyw5IDUsOSA2LDkgNiw4IDUsOCA1LDMgNywzIDcsNCA4LDQgOCwxIDcsMSAwLDEgMCwyIDAsMyAwLDQgMSw0IFxcXCI+PC9wb2x5Z29uPjxyZWN0IHg9XFxcIjEwXFxcIiB5PVxcXCI1XFxcIiB3aWR0aD1cXFwiNlxcXCIgaGVpZ2h0PVxcXCIxXFxcIj48L3JlY3Q+PHJlY3QgeD1cXFwiMTBcXFwiIHk9XFxcIjhcXFwiIHdpZHRoPVxcXCI2XFxcIiBoZWlnaHQ9XFxcIjFcXFwiPjwvcmVjdD48cmVjdCB5PVxcXCIxMVxcXCIgd2lkdGg9XFxcIjE2XFxcIiBoZWlnaHQ9XFxcIjFcXFwiPjwvcmVjdD48cmVjdCB5PVxcXCIxNFxcXCIgd2lkdGg9XFxcIjE2XFxcIiBoZWlnaHQ9XFxcIjFcXFwiPjwvcmVjdD48L2c+PC9zdmc+XCIiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImZ1bmN0aW9uIGluaXQoU3VydmV5KSB7XG4gIGNvbnN0IGljb25JZCA9IFwiaWNvbi1lZGl0b3JcIjtcbiAgY29uc3QgY29tcG9uZW50TmFtZSA9IFwiZWRpdG9yXCI7XG4gIFN1cnZleS5TdmdSZWdpc3RyeSAmJiBTdXJ2ZXkuU3ZnUmVnaXN0cnkucmVnaXN0ZXJJY29uRnJvbVN2ZyhpY29uSWQsIHJlcXVpcmUoJ3N2Zy1pbmxpbmUtbG9hZGVyIS4vaW1hZ2VzL2VkaXRvci5zdmcnKSwgXCJcIik7XG4gIHZhciB3aWRnZXQgPSB7XG4gICAgbmFtZTogY29tcG9uZW50TmFtZSxcbiAgICB0aXRsZTogXCJFZGl0b3JcIixcbiAgICBpY29uTmFtZTogaWNvbklkLFxuICAgIHdpZGdldElzTG9hZGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIENLRURJVE9SICE9IFwidW5kZWZpbmVkXCI7XG4gICAgfSxcbiAgICBpc0ZpdDogZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0VHlwZSgpID09PSBjb21wb25lbnROYW1lO1xuICAgIH0sXG4gICAgaHRtbFRlbXBsYXRlOlxuICAgICAgXCI8dGV4dGFyZWEgcm93cz0nMTAnIGNvbHM9JzgwJyBzdHlsZToge3dpZHRoOicxMDAlJ30+PC90ZXh0YXJlYT5cIixcbiAgICBhY3RpdmF0ZWRCeUNoYW5nZWQ6IGZ1bmN0aW9uIChhY3RpdmF0ZWRCeSkge1xuICAgICAgU3VydmV5LlNlcmlhbGl6ZXIuYWRkQ2xhc3MoY29tcG9uZW50TmFtZSwgW10sIG51bGwsIFwiZW1wdHlcIik7XG4gICAgICBsZXQgcmVnaXN0ZXJRdWVzdGlvbiA9IFN1cnZleS5FbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckN1c3RvbVF1ZXN0aW9uO1xuICAgICAgaWYoISFyZWdpc3RlclF1ZXN0aW9uKSByZWdpc3RlclF1ZXN0aW9uKGNvbXBvbmVudE5hbWUpO1xuICAgICAgU3VydmV5LlNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoY29tcG9uZW50TmFtZSwge1xuICAgICAgICBuYW1lOiBcImhlaWdodFwiLFxuICAgICAgICBkZWZhdWx0OiAzMDAsXG4gICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciBuYW1lID0gcXVlc3Rpb24uaW5wdXRJZDtcbiAgICAgIENLRURJVE9SLmVkaXRvckNvbmZpZyA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgY29uZmlnLmxhbmd1YWdlID0gXCJlc1wiO1xuICAgICAgICBjb25maWcuaGVpZ2h0ID0gcXVlc3Rpb24uaGVpZ2h0O1xuICAgICAgICBjb25maWcudG9vbGJhckNhbkNvbGxhcHNlID0gdHJ1ZTtcbiAgICAgIH07XG4gICAgICBlbC5uYW1lID0gbmFtZTtcblxuICAgICAgaWYgKENLRURJVE9SLmluc3RhbmNlc1tuYW1lXSkge1xuICAgICAgICBDS0VESVRPUi5pbnN0YW5jZXNbbmFtZV0ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgIENLRURJVE9SLnJlbW92ZShDS0VESVRPUi5pbnN0YW5jZXNbbmFtZV0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgZWRpdG9yID0gQ0tFRElUT1IucmVwbGFjZShlbCk7XG4gICAgICBDS0VESVRPUi5pbnN0YW5jZXNbbmFtZV0uY29uZmlnLnJlYWRPbmx5ID0gcXVlc3Rpb24uaXNSZWFkT25seTtcblxuICAgICAgdmFyIGlzVmFsdWVDaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgdmFyIHVwZGF0ZVZhbHVlSGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzVmFsdWVDaGFuZ2luZyB8fCB0eXBlb2YgcXVlc3Rpb24udmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICAgICAgZWRpdG9yLnNldERhdGEocXVlc3Rpb24udmFsdWUpO1xuICAgICAgfTtcbiAgICAgIGVkaXRvci5vbihcImNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlzVmFsdWVDaGFuZ2luZyA9IHRydWU7XG4gICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gZWRpdG9yLmdldERhdGEoKTtcbiAgICAgICAgaXNWYWx1ZUNoYW5naW5nID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1cGRhdGVWYWx1ZUhhbmRsZXI7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmlzUmVhZE9ubHkpIHtcbiAgICAgICAgICBlZGl0b3Iuc2V0UmVhZE9ubHkodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdG9yLnNldFJlYWRPbmx5KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHVwZGF0ZVZhbHVlSGFuZGxlcigpO1xuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICAgIENLRURJVE9SLmluc3RhbmNlc1txdWVzdGlvbi5pbnB1dElkXS5kZXN0cm95KGZhbHNlKTtcbiAgICB9LFxuICAgIHBkZlJlbmRlcjogZnVuY3Rpb24gKHN1cnZleSwgb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMucXVlc3Rpb24uZ2V0VHlwZSgpID09PSBjb21wb25lbnROYW1lKSB7XG4gICAgICAgIGNvbnN0IGxvYyA9IG5ldyBTdXJ2ZXkuTG9jYWxpemFibGVTdHJpbmcoc3VydmV5LCB0cnVlKTtcbiAgICAgICAgbG9jLnRleHQgPSBvcHRpb25zLnF1ZXN0aW9uLnZhbHVlIHx8IG9wdGlvbnMucXVlc3Rpb24uZGVmYXVsdFZhbHVlO1xuICAgICAgICBvcHRpb25zLnF1ZXN0aW9uW1wibG9jSHRtbFwiXSA9IGxvYztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24ucmVuZGVyQXMgPT09IFwic3RhbmRhcmRcIiB8fFxuICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24ucmVuZGVyQXMgPT09IFwiaW1hZ2VcIlxuICAgICAgICApIHtcbiAgICAgICAgICBvcHRpb25zLnF1ZXN0aW9uW1wicmVuZGVyQXNcIl0gPSBvcHRpb25zLnF1ZXN0aW9uLnJlbmRlckFzO1xuICAgICAgICB9IGVsc2Ugb3B0aW9ucy5xdWVzdGlvbltcInJlbmRlckFzXCJdID0gXCJhdXRvXCI7XG4gICAgICAgIGNvbnN0IGZsYXRIdG1sID0gb3B0aW9ucy5yZXBvc2l0b3J5LmNyZWF0ZShcbiAgICAgICAgICBzdXJ2ZXksXG4gICAgICAgICAgb3B0aW9ucy5xdWVzdGlvbixcbiAgICAgICAgICBvcHRpb25zLmNvbnRyb2xsZXIsXG4gICAgICAgICAgXCJodG1sXCJcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgZmxhdEh0bWwuZ2VuZXJhdGVGbGF0cyhvcHRpb25zLnBvaW50KS50aGVuKGZ1bmN0aW9uIChodG1sQnJpY2tzKSB7XG4gICAgICAgICAgICBvcHRpb25zLmJyaWNrcyA9IGh0bWxCcmlja3M7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCwgXCJjdXN0b210eXBlXCIpO1xufVxuXG5pZiAodHlwZW9mIFN1cnZleSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBpbml0KFN1cnZleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=